Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to implement search functionality in ReactJS

Getting Started

The ability to search through a list of items or data is a common feature in web applications. In ReactJS, implementing a search functionality might seem complex at first, but it's surprisingly straightforward once you understand the core concepts. In this post, I'll guide you through the process of creating a basic search functionality in ReactJS.

Understanding State in ReactJS

Before we dive into the code, let's discuss a key concept in ReactJS - "state". When I mention "state", I want you to think of it as the memory of our application. Just like how we, as humans, remember things, our application also needs to remember certain pieces of information to work properly. That's what "state" is - the memory of our application.

Starting with a Static List

We'll start by creating a static list. This is a list that doesn't change. It's like a grocery list that you've written down and can't add or remove items from. Here's how we can create a static list in ReactJS:

function App() {
  const groceryList = ['Milk', 'Bread', 'Cheese'];

  return (
    <div>
      {groceryList.map((item, index) => (
        <p key={index}>{item}</p>
      ))}
    </div>
  );
}

export default App;

In the code above, we're mapping through the groceryList array and rendering each item as a paragraph. The key attribute is used by React to uniquely identify each element in the list.

Next, let's create a search bar. This is where the user will be typing in their search query. Think of it as a magic box, you tell it what you're looking for, and it will try to find that for you.

function App() {
  const groceryList = ['Milk', 'Bread', 'Cheese'];
  const [searchTerm, setSearchTerm] = React.useState('');

  return (
    <div>
      <input
        type="text"
        placeholder="Search"
        value={searchTerm}
        onChange={(event) => setSearchTerm(event.target.value)}
      />
      {groceryList.map((item, index) => (
        <p key={index}>{item}</p>
      ))}
    </div>
  );
}

export default App;

Here, we're using the useState hook from React to create a state variable called searchTerm. This variable will store the current value of the search bar. We're setting the value of the search bar to searchTerm and updating it every time the user types something.

Filtering The List Based on Search Term

Now, we'll make our list dynamic by filtering the items based on the search term. Think of it as a sieve, it only lets through items that match the search term.

function App() {
  const groceryList = ['Milk', 'Bread', 'Cheese'];
  const [searchTerm, setSearchTerm] = React.useState('');

  const filteredList = groceryList.filter((item) =>
    item.toLowerCase().includes(searchTerm.toLowerCase())
  );

  return (
    <div>
      <input
        type="text"
        placeholder="Search"
        value={searchTerm}
        onChange={(event) => setSearchTerm(event.target.value)}
      />
      {filteredList.map((item, index) => (
        <p key={index}>{item}</p>
      ))}
    </div>
  );
}

export default App;

In the code above, we're creating a new array filteredList that contains only the items that include the search term. The filter method is used to create a new array with all array items that pass a test. In our case, the test is whether the item includes the search term.

Conclusion

And there we have it - a basic search functionality in ReactJS. It's like we've built our own little search engine! Remember, understanding the core concepts and breaking down the problem into smaller parts can make complex tasks seem much more manageable.

This search feature is far from perfect. For example, it performs a case-sensitive search, which means it treats 'Milk' and 'milk' as different strings. But for now, take a moment to celebrate your accomplishment. As you continue your programming journey, you'll learn more advanced techniques to improve this feature. Remember to keep experimenting, keep learning, and most importantly, have fun coding!