【发布时间】:2021-03-22 08:26:12
【问题描述】:
我正在使用 useEffect 来响应收听 redux(easy-peasy) 状态变化,但我只想收听第一个值的变化。
因为当我的页面加载时,状态具有默认值,然后进行 API 调用,因此数据发生更改,但 API 是轮询 API,因此它会在短时间内一次又一次地获取数据。但我的要求之一是只收听第一个 API 数据。
这是我尝试过的:
具有空依赖项的第一种方法
useEffect(() => {
// my code
},[])
在这种情况下,我得到的是我的状态的默认值,而不是第一个 API 响应。
依赖项中具有 state 属性的第二种方法
useEffect(() => {
// my code
},[myState])
在这种情况下,我不断从 API 获得更新的响应
这两种方法都不适合我。所以请提出一个更好的解决方案。
【问题讨论】:
-
如果您对响应不感兴趣,为什么还要继续轮询 API?
-
无论如何,您可以添加一个状态变量来跟踪您是否应该在 useEffect 中运行代码
-
如果您不需要响应,则不应触发 API 调用。如果不需要,效果不应该运行。因此,您可能可以优化设置状态和效果的方式以防止这种情况发生。但是现在一个肮脏的修复方法是只使用一个 ref 并存储它是否已经更新过一次。然后如果是这样,在你的效果的顶部,你只需检查那个 ref 如果它已经运行,简单的
return
标签: javascript reactjs redux easy-peasy