I’m new in React. I’m try to filter data after this data will received.
I have select tag with options and I want to change data array after select will changed.
For example if selected option will have value ‘crypto’ show array only with type ‘crypto’
Thanks for answer
import { useState, useEffect } from 'react'
const Fetch = () => {
const [data, setData] = useState();
const [currency, setCurrency] = useState('crypto');
const [isLoaded, setIsLoaded] = useState(false);
useEffect(() => {
fetch('https://api.coingecko.com/api/v3/exchange_rates')
.then((res) => { return res.json() })
.then((res) => { setData(res.rates); setIsLoaded(true); console.log(res); })
}, [])
if (!isLoaded) {
return <h2>Waiting for data...</h2>
} else {
return (
<div>
<label htmlFor="currency">Choose currency: </label>
<select id='currency' onChange={setCurrency}>
<option value="all">All</option>
<option value="crypto">Crypto</option>
<option value="fiat">Fiat</option>
<option value="commodity">Commodity</option>
</select>
{Object.values(data).map((item, i) => {
return (
<div key={i}>
<h3>{item.name}({item.unit}) : <span style={{ color: "red" }}>{item.value}</span></h3>
<p>type: {item.type} </p>
<hr />
</div>
)
})}
</div>
)
}
}
export default Fetch;
If statement not working
2
Answers
To filter data in JavaScript, you may use the
filter
function:Pass a function of your choice that returns either
true
orfalse
for each value in the array.If you want more details, you can find them in the docs.
First you need to fix your
onChange
handler this returns a React ChangeEvent. Currently you’re setting the state to the event instead of the selected value. For this you’ll also need to add avalue
prop to make the select element a controlled input.For the filtering you can use
filter
.