I am trying to add Seach filter using the react, and using json data I am trying to match it with the search term
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 :)