React by Patrik

State Management and Propagation in React

Overview: Managing state efficiently is key to ensuring React applications are performant and responsive. In this implementation, we separate the concerns of managing user input and fetching/displaying search results. The state for the search query is managed in the SearchPage component, while the search input is handled by the SearchInput component. This separation ensures that only the necessary components re-render when the state changes.

Implementation: The SearchPage component manages the query state and passes it down to both the SearchInput and SearchList components. When the SearchInput component detects a change in the input field, it propagates the debounced query to the SearchPage using a callback function. This avoids unnecessary re-renders of components that don't need to be updated.

import React, { useState, useEffect } from "react";
import SearchInput from "./SearchInput";
import SearchList from "./SearchList";

function SearchPage() {
  const [debouncedQuery, setDebouncedQuery] = useState("");

  const handleDebouncedQueryChange = (newQuery) => {
    setDebouncedQuery(newQuery);
  };

  return (
    <div>
      <SearchInput onDebouncedQueryChange={handleDebouncedQueryChange} />
      <SearchList q={debouncedQuery} />
    </div>
  );
}

This structure ensures that the SearchList component only re-renders when the debounced query changes, preventing unnecessary re-renders during the user’s typing.

Comments