解决React中useEffect导致无限循环的问题
P粉018548441
P粉018548441 2023-08-14 18:47:03
[React讨论组]
<p>为什么这段代码在React中会产生无限循环。这里的useEffect与data和columnDataWithTaskProperty一起导致了无限循环,但我不知道为什么</p> <pre class="brush:php;toolbar:false;">const useBoard = () =&gt; { const { data: columnData } = useGetColumnQuery(); const { data } = useGetTaskAccordingToStatus(); const [columnDataWithTaskProperty, setColumnDataWithTaskProperty] = useState( [] ); const [finalState, sFinalState] = useState([]); useEffect(() =&gt; { const allColumns = columnData?.data?.map((item) =&gt; ({ name: item.name, _id: item._id, tasks: [], })); setColumnDataWithTaskProperty(allColumns); }, [columnData]); useEffect(() =&gt; { console.log("meeee data deps"); const updatedColumns = columnDataWithTaskProperty.map((column) =&gt; ({ ...column, tasks: data.flat().filter((task) =&gt; task.status === column.name), })); sFinalState(updatedColumns); }, [columnDataWithTaskProperty, data]); return { finalState, }; };</pre> <p>这里是我如何使用useGetTaskAccordingToStatus来获取数据。我使用了React Query来获取数据。</p> <pre class="brush:php;toolbar:false;">const useGetTaskAccordingToStatus = () =&gt; { const { active_project } = useSelector(projectDataInStore); const userQueries = useQueries({ queries: statesOfTaskManager.map((status) =&gt; { return { queryKey: [status, active_project], queryFn: () =&gt; customAxiosRequestForGet("/task", { status, projectName: active_project, }), onSuccess: ({ data }) =&gt; { return data; }, }; }), }); const data = userQueries?.map((item) =&gt; item?.data?.data); return { data }; };</pre> <p><br /></p>
P粉018548441
P粉018548441

全部回复(1)
P粉574695215

我建议你只使用一个use效果,并删除columnDataWithTaskProperty来测试sack,以后可以再返回它。 这是我的建议示例,但没有实际数据无法测试。

const useBoard = () => {
  const { data: columnData } = useGetColumnQuery();
  const { data } = useGetTaskAccordingToStatus();
  const [finalState, sFinalState] = useState([]);

  useEffect(() => {
    const allColumns = columnData?.data?.map((item) => ({
      name: item.name,
      _id: item._id,
      tasks: [],
    }));
      console.log("meeee data deps");
      const updatedColumns = allColumns.map((column) => ({
        ...column,
        tasks: data.flat().filter((task) => task.status === column.name),
      }));
      sFinalState(updatedColumns);
  }, [columnData, data]);

  return {
    finalState,
  };
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号