Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs useEffect清除,然后重新填充我的反应挂钩_Reactjs_React Hooks_Use Effect - Fatal编程技术网

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是否应该表示相同的函数?是的,请原谅我的草率。我会快速编辑的!