【发布时间】:2021-07-14 16:07:38
【问题描述】:
我必须实现的是从第一次渲染本身按排序顺序显示从 api 响应获得的数据。
这就是我使用 useEffect 挂钩的方式:-
useEffect(()=>{
async function fetchProject() {
await axios.post(envurls.wv+'/show_project',{
params:{
authtoken:authtoken,
user:user
}
}).then((response)=>{
console.log('Res', response.data);
setShowProject(response.data)
}).catch((error)=>{
console.log(error)
})
}
fetchProject();
},[]);
useEffect(() => {
showProject.length> 0 && sortArray();
}, []);
const sortArray = ()=> {
const sortProperty = 'timestamp';
sorted = [...showProject].sort((a, b) => (a[sortProperty] > b[sortProperty] ? -1 : 1))
console.log("Project", showProject);
console.log("Sorted Data", sorted);
setShowProject(sorted);
};
但在第一次渲染时,它不会对数据进行排序,因为 showProject 数组是空的。所以,我在控制台上将项目和排序数据作为空数组。
如果我像这样在 useEffect 中提供 showProject:-
useEffect(() => {
showProject.length> 0 && sortArray();
}, [showProject]);
然后它为第一次渲染本身显示排序数据,但项目和排序数据在控制台中显示 n 次。
【问题讨论】:
-
为什么排序数组函数需要在useEffect中?此外,由 fetch 填充的状态将在第一次渲染时始终是默认状态。
-
收到后不能排序吗?
-
因为,我必须根据其他状态对数据进行排序,例如排序类型“asc”或“desc”。所以每次用户从 asc 切换到 desc。 sortArray 应该被调用。所以我在这里将 [sortType] 作为第二个参数传递给 sortArray 的 useEffect
-
如果 useEffect 依赖于状态
showProject那么它应该被放入依赖数组中。此外,您没有将任何内容传递给sortArray -
我试图通过 showProject 但它在控制台中显示数据 n 次。我忘了在这里添加它。我只是编辑了代码。
标签: javascript reactjs async-await react-hooks use-effect