#javascript #reactjs
Вопрос:
Я создал функцию, которая находит данные JSON в React, и она работает (я проверил с помощью console.log), но когда я сопоставляю в div с помощью JSX ({myFunction.map ()}), она вообще не показывает никаких выходных данных. Я пробовал использовать консоль.войдите в этот раздел, он тоже не работает.
Состояния:
const [coins, setCoins] = useState([]);
const [search, setSearch] = useState("");
Вот запрос на получение:
useEffect(() => {
axios.get(
"secret-url"
).then((res) => {
setCoins(res.data);
console.log(res.data); **//This cosole.log working, showing all json data**
}).catch((error) => {
console.log(error);
});
}, []);
Вот функция:
const filteredCoins = coins.filter((coin) => {
coin.name.toLowerCase().includes(search.toLowerCase());
console.log('ABCD'); **// This is working, meaning function is working**
});
Сопоставление JSX (Эта часть не работает:
<div className="crypto-app">
{filteredCoins.map(coin => {
console.log('ABCD'); **//Not Working**
return <Coin key={coin.id} name={coin.name} price={coin.current_price} image={coin.image} volume=
{coin.volume} symbol={coin.market_cap} /> })}
</div>
Комментарии:
1. Я напортачил во время публикации вопроса. Но в консоли кода тоже не работает, и ни один компонент <Coin/> не отображается.
2. Вы доказали, что в
filteredCoins
списке действительно что-то есть перед картой? Есть ли ошибки в консоли, которые могут быть информативными?
Ответ №1:
filter
создает новый массив, содержащий все значения из исходного массива, для которого возвращает функция true
.
У вашей функции нет return
оператора, поэтому она всегда возвращает undefined
, поэтому filteredCoins
она пуста.
Затем вы map
перекрываете пустой массив, чтобы функция сопоставления никогда не вызывалась (если бы это было так, это привело бы к ошибке, потому что вы неправильно console
написали ).
Ответ №2:
Попробуйте этот код.
<div className="crypto-app">
{coins
.filter((coin) => {`enter code here`
if (search === "") {
return coin;
} else if (
Object.values(coin)
.toString()
.includes(search.toLowerCase())
) {
return coin;
}
})
.map(coin => {
console.log('ABCD'); **//Not Working**
return <Coin key={coin.id} name={coin.name} price={coin.current_price} image=
{coin.image} volume= {coin.volume} symbol={coin.market_cap} />
})
</div>