axios 使用useEffect获得无限循环,带依赖项,没有依赖项应用程序不工作

fdx2calv  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(125)
useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('http://localhost:8888/todos');
        console.log('Response:', response.data);
        const todosWithBooleanDone = response.data.map(todo => ({
          id: todo.id,
          name: todo.name,
          done: todo.done === 1,
        }));
        console.log('Setting todos:', todosWithBooleanDone);
        setTodos(todosWithBooleanDone);
      } catch (error) {
        console.error('Error fetching todos:', error);
      }
    };

    fetchData();
  }, [todos]);

字符串
我不指望有上百万的请求。
如果数组中没有依赖todos,我的应用程序就无法工作!
我想添加一个新的useEffect,但它不工作。
我接近解决方案,但我真的不知道如何解决它。

uxhixvfz

uxhixvfz1#

每次在todos上有更新时,都会调用您的useEffect,并且您会反复调用setTodos来更新todos,这会导致无限次调用。
您的第一个useEffect可以没有依赖项,仅在组件挂载上运行以获取和设置todos

useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('http://localhost:8888/todos');
        console.log('Response:', response.data);
        const todosWithBooleanDone = response.data.map(todo => ({
          id: todo.id,
          name: todo.name,
          done: todo.done === 1,
        }));
        console.log('Setting todos:', todosWithBooleanDone);
        setTodos(todosWithBooleanDone);
      } catch (error) {
        console.error('Error fetching todos:', error);
      }
    };

    fetchData();
  }, []); // <-- Without dependency

字符串
每次todos更改时都要运行另一个useEffect

useEffect(() => {
    // Your code whenever todos changes.
}, [todos]); // <--- With dependency

相关问题