我有一个名为responses的状态,它最初是一个空数组。在我从一个API中获取一些数据后,它是一个对象数组。我将该数组的每个对象推送到本地创建的数组名称listMeals
。在将每个对象推送到listMeals
后,我通过调用setResponse
将名为Response
的状态更新为listMeals
。
import React , { useEffect, useState, useCallback } from 'react';
import './App.css';
const ste = {
background:"pink",
border:"2px solid purple",
margin:"20px 0px",
display:"flex",
flexDirection:"Column",
justifyContent:"center",
alignItems:"center",}
function App() {
const [responses, setResponse] = useState([]);
useEffect(()=>{
const fetchData = async () =>{
const response = await fetch("APi");
const responseData = await response.json();
const listMeals =[]
for (const key in responseData){
listMeals.push({
id:responseData[key].id,
name:responseData[key].name,
ingredients:responseData[key].ingredients
})
}
setResponse(listMeals);
}
fetchData()},[]);
const compare = useCallback(( a, b ) => {
if ( a.name < b.name ){
return -1;
}
if ( a.name > b.name ){
return 1;
}
return 0;
},[]);
const sort = () => {
setResponse(previousList => previousList.sort(compare);}
return (
<div className="App">
<button onClick={sort}>Sort</button>
{responses.map(each => {
return <div style={ste} key={each.id}>
<h2>{each.name}</h2>
{each.ingredients.map(ingr =>
{return <ul key={Math.random()}>
<li>{ingr.name}</li>
<li>{ingr.quantity}</li>
<li>{ingr.quantity_type}</li>
</ul>} )}</div>
})
}
</div>
);
}
export default App;
稍后,我想在按下名为sort的按钮时按降序对Array进行排序,为此,我在前一个状态上使用sort(),但状态没有更新。请帮助。
2条答案
按热度按时间70gysomp1#
根据
.sort
的文档:sort()
方法对数组的元素进行排序,并返回对同一数组的引用,现在已经排序。这意味着你实际上并没有设置一个新的状态,而是在改变状态。正是因为这个原因,你不应该这样做,框架不知道它,也不期望它。
相反,将数组内容分散到一个 new 数组中,对其进行排序,并将state设置为该新数组。例如:
bpzcxfmw2#
怎么说David你可以传播,但它不是主要问题在你的情况
请尝试关闭setResponse函数,因为它未关闭
特别为你,与爱〈3