【问题标题】:To many calls of useEffect - React多次调用 useEffect - React
【发布时间】:2020-01-05 07:14:21
【问题描述】:

我只想在productType 更改时在我的useEffect 方法中执行代码, 并且一旦页面加载,我就可以识别 console.log 执行超过 6-7 次,这是我不想要的。

这是我的代码摘要:

const [productType, setProductType] = useState(null);

useEffect(() => {
  console.log(productType);
}, productType);

想法是在productType 发生变化时执行这个useEffect 中的代码, 我正在像这样在下拉列表中更改它:

<MyDropdownComponent
  value={productType}
  onChange={e => setExportType(e.target.value)}
  width={200}
/>

所以我想知道为什么当我加载这个视图/模板时,我的控制台中出现了 6-7-8 console.logs of null..

【问题讨论】:

    标签: reactjs react-hooks use-effect


    【解决方案1】:

    useEffect Hook 需要一个数组作为第二个参数。他们可能已经这样做了,以区分空数组(仅运行一次效果)和默认值(在每次渲染上运行),如果他们直接使用arguments,他们就无法做到这一点。

    你需要像这样传递一个数组:

    useEffect(() => {
      console.log(productType);
    }, [productType]);
    

    【讨论】:

    • 谢谢,我会接受它,你可能会为未来的读者添加一些解释:) 为什么我的方法是错误的等等。
    • 我试图对此进行推理,但主要原因是 API 需要一个数组。就是这样。
    • 谢谢你!如果我想在 useEffect 中执行此代码,即使 productType 具有相同的值,该怎么办? (未更改值,例如让我们将 productType 设置为值 1,即使它再次为 1 也让我们执行此操作.. :))
    • 您只需将第二个参数排除在外,它就会在每次渲染后(之后)运行。但是如果你用之前的值调用setProductType,react 不会导致渲染,因此你的效果也不会被调用,只有当其他一些值发生变化时。例如,如果你想强制渲染,你可以引入另一个状态变量。
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2023-01-18
    • 2021-10-16
    • 2021-03-23
    • 2021-06-04
    • 2022-06-12
    相关资源
    最近更新 更多