Reactjs useEffect清除,然后重新填充我的反应挂钩
我有两个使用过的状态数组,它们将被称为查询和消息Reactjs useEffect清除,然后重新填充我的反应挂钩,reactjs,react-hooks,use-effect,Reactjs,React Hooks,Use Effect,我有两个使用过的状态数组,它们将被称为查询和消息 const [queries, setQueries] = useState([]); const [messages, setMessages] = useState([]); 我有它,所以当用户键入搜索查询时,它会将查询添加到屏幕上的查询列表中。当用户删除其中一个查询或添加新查询时,“我的使用状态”将读取列表上的最后一个查询,并在useEffect中运行一个获取请求 useEffect(() => { if (qu
const [queries, setQueries] = useState([]);
const [messages, setMessages] = useState([]);
我有它,所以当用户键入搜索查询时,它会将查询添加到屏幕上的查询列表中。当用户删除其中一个查询或添加新查询时,“我的使用状态”将读取列表上的最后一个查询,并在useEffect中运行一个获取请求
useEffect(() => {
if (queries.length > 0) {
const [x] = queries.slice(-1);
axios
.get(`FETCH REQUEST`)
.then((res) => {
setMessages(res.data.messages);
})
.catch((err) => {
console.log(err);
});
} else {
setMessages([]); // <-- this right here is my problem!
}
}, [queries]);
问题是,在数组中没有任何项之前,一切都正常工作。它将短暂地返回一个空消息数组,然后以某种方式获取最后一个删除的项目。从我所能得出的结论来看,这就是问题所在,但我不理解原因或方式,尽管我试图以各种方式强制我的结果。提前感谢您的帮助 如果需要,setState函数可以异步工作,它可以加入多个请求,而无需任何特定顺序来优化应用程序性能。这可能会多次触发useEffect并错误地设置消息状态。相反,您可以在setquerys调用中使用回调来设置消息状态
function cbAddOrDeleteQuery() {
...
setQueries(_ => {
// newVal represents the updated queries
if (newVal.length > 0) {
setMessage(res.data.messages);
} else {
setMessage([]);
}
return newVal;
});
}
setMsg、setMessage和setMessages是否应该表示相同的函数?是的,请原谅我的草率。我会快速编辑的!