Search in React js

import React, { useEffect, useState } from 'react';
import Loader from "../../components/Loader";
import { Link } from 'react-router-dom';

export default function UserList() {
    const [data, setData] = useState([]);
    const [search, setSearch] = useState("");
    const [filterData, setFilterData] = useState([]);

    useEffect(() => {
        getData();
    }, []);

    const getData = async () => {
        try {
            const response = await fetch("https://jsonplaceholder.typicode.com/users");
            const userData = await response.json();
            setData(userData);
            setFilterData(userData);
        } catch (error) {
            console.log(error.message);
        }
    }

    useEffect(() => {
        const user = data.filter((user) =>
            user.name.toLowerCase().includes(search.toLowerCase()) ||
            user.email.toLowerCase().includes(search.toLowerCase()) ||
            user.phone.toLowerCase().includes(search.toLowerCase())
        );
        setFilterData(user)
    }, [search, data])

    return (
        <>
            {data.length > 0
                ?
                <>
                    <section className="container mt-5">
                        <input type="text" className='form-control mb-3' onChange={(e) => setSearch(e.target.value)} placeholder='Find User...' />
                        <div className="card">
                            <div className="card-header">
                                <h5 className='text-center'>User List</h5>
                            </div>
                            <div className="card-body">
                                <table className='table'>
                                    <thead>
                                        <tr>
                                            <th>Id</th>
                                            <th>Name</th>
                                            <th>Email</th>
                                            <th>Contact</th>
                                            <th>Action</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        {filterData.map((items) => (
                                            <tr key={items.id}>
                                                <td>{items.id}</td>
                                                <td>{items.name}</td>
                                                <td>{items.email}</td>
                                                <td>{items.phone}</td>
                                                <td>
                                                    <Link to={`/user/${items.id}`}>
                                                        <button className='btn btn-primary'>View</button>
                                                    </Link>
                                                </td>
                                            </tr>
                                        ))}
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </section>
                </>
                :
                <Loader />
            }
        </>
    )
}

Comments

Popular posts from this blog

Create a Connection in Node js and make an API

React JS | Store form data in localStorage

React Redux Toolkit