How to filter data after data is fetched in React?

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

>Solution :

To filter data in JavaScript, you may use the filter function:

Object.values(data)
      .filter(item => item?.type === currency)
      .map(...)

Pass a function of your choice that returns either true or false for each value in the array.

If you want more details, you can find them in the docs.

Leave a Reply