ReactJS:第一个useEffect在第二个被触发之前不会更新状态

时间:2020-04-20 10:57:33

标签: javascript reactjs react-hooks use-effect

我有一个聊天组件,该组件使用API​​来填充messages状态,也有不同的区域,它们具有不同的聊天内容,并作为道具传递给该组件。

在此组件中,我有3个useEffects,但我对其中两个运行不正常的部分感兴趣。在第一个useEffect中,我有一些代码基本上将区域更改为messages时的undefined状态重置。我需要执行此操作,以便能够区分在显示加载组件<Spinner />时尚未调用的API还是已调用该API且已检索到空数组以显示<NoData>的API零件。

我遇到的问题是,当我更改区域时,useEffects会被触发,但是第一个useEffect不会在第二个{之前将messages状态更新为未定义{1}}被调用。在由于历史原因而重新提交后,消息以未定义的形式出现,但是第二个useEffect不再触发。我不明白为什么在第二个之前的第一个useEffect中没有更新状态。同样奇怪的是,这在过去对我有用。我在不推动git的情况下改变了一些东西,现在我感到困惑。下面的代码:

useEffect

1 个答案:

答案 0 :(得分:0)

您无法通过这种方式获得想要的东西。在useEffect中应用的状态更改在下一个渲染周期之前不会生效,以下回调仍将看到当前的const值。 如果要在当前渲染周期中更改值,唯一的选择是将const放宽为let并自行设置变量。

毕竟:您期望const会改变吗? ;)