简体   繁体   中英

I am trying to add add Search filter in react but I am getting this error

  1. I am trying to add Seach filter using the react, and using json data I am trying to match it with the search term

  2. Below is my code

    const App = () => { const [searchTerm, setSearchTerm] = useState([""]) const [query, setQuery] = useState("");

    useEffect(() => { const url = "https://60d075407de0b20017108b89.mockapi.io/api/v1/animals";

     const fetchData = async () => { try { const response = await fetch(url); const json = await response.json(); console.log([json].query); setQuery(json.query); } catch (error) { console.log("error", error); } }; fetchData();

    }, []);

    return ( <input type='text' placeholder='search....' onChange={event => { setSearchTerm(event.target.value) }} />

     { query.filter((val) => { if (searchTerm === "s") { return val } else if (val.name.toLowerCase().includes(searchTerm.toLowerCase())) { return val } else return false }).map((val) => { return ( <div className='user' > <p>{val.name}</p> <p>age: {monthDiff(val.bornAt)} months</p> </div> ); })} </div>

    ); };

When I try to execute, I am getting this below error can anyone explain why it is happening

> Uncaught TypeError: Cannot read properties of undefined (reading
> 'toLowerCase')

It looks like you're initializing query to a string instead of an array of strings.

Maybe try changing this:

const [query, setQuery] = useState("");

to

const [query, setQuery] = useState([""]);

Also, your searchTerm is initialized to an array: you might have just mixed those up:)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM