reactjs - 为什么 useEffect 钩子(Hook)不触发依赖项数组中的对象?

标签 reactjs react-hooks use-effect use-state

我在使用钩子(Hook)时注意到一些非常奇怪的事情,我有以下几点:

import React, { useState, useEffect } from "react";

const [dependency1, setDependency1] = useState({});
const [dependency2, setDependency2] = useState([]);

useEffect(() => {
  console.log("dependency 1 got an update");
}, [dependency1]);

useEffect(() => {
  console.log("dependency 2 got an update");
}, [dependency2]);

setInterval(() => {
  setDependency1(prevDep1 => {
    const _key = "test_" + Math.random().toString();
    if (prevDep1[_key] === undefined) prevDep1[_key] = [];
    else prevDep1[key].push("foo");
    return prevDep1;
  })
  setDependency2(prevDep2 => [...prevDep2, Math.random()]);
}, 1000);

出于某种原因,只有 dependency2 (添加项目的数组) 的 useEffect 触发,dependency1 (添加键的对象) 不会触发..

为什么会发生这种情况,我该如何让它发挥作用?

最佳答案

setInterval(() => {
    setDependency1(prevDep1 => {
      const _key = "test_" + Math.random().toString();
      return {...prevDep1, [_key]: [...(prevDep1[_key] || []), 'foo']   }
    })
    setDependency2(prevDep2 => [...prevDep2, Math.random()]);
  }, 1000);

状态应该以不可变的方式更新。

关于reactjs - 为什么 useEffect 钩子(Hook)不触发依赖项数组中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62660066/

相关文章:

javascript - 当在 react 组件中作为 Prop 传递时,如何模拟函数并测试它们是否被调用?

javascript - 使数组可在函数组件中绑定(bind)

javascript - 如何使用具有多个数组的对象的钩子(Hook)设置状态?这里如何设置债务人?

javascript - 对于无法正常工作的复杂场景,用 useEffect Hook 替换 React Hook 中的 setState 回调

reactjs - 检索参数并将参数设置为 useEffect Hook 中的获取请求中的参数

reactjs - 使用 React Hooks 时如何替换 this.setState?

javascript - 将禁用属性添加到 React 中动态创建的按钮

javascript - Antd Modal,点击Mask不执行任何操作

reactjs - 是否可以将 props 从 React Link 传递到功能组件?

reactjs - 使用钩子(Hook)触发子组件( react 表)的重新渲染