React:如何在功能组件中强制状态更新?

时间:2019-12-09 22:38:41

标签: javascript reactjs

此功能组件具有一个调用onChangeHandler的模板方法,该方法接受一个select的值并更新state。问题是,state直到第二次调用render方法之后才更新,这意味着所选选项的值比state的{​​{1}}值高一个步骤。 / p>

我知道类组件中有一些生命周期方法,可以用来强制进行selectedRouteName更新,但是如果可能的话,我希望将其保留为功能组件。

如代码中所述,state的记录状态是所选选项后面的一个值。如何强制selectedRouteDirection更新为功能组件中的正确值?

此问题与类似的问题不同,因为我的问题询问用例中的实际实现,而不是是否可能。

state

2 个答案:

答案 0 :(得分:1)

嗯,实际上..即使我仍然认为效果是正确的方法..您的console.log位于错误的位置。.fetch是异步的,而您的console.log是在fetch指令之后。

正如@Bernardo所说.. setState也是异步的 因此在您呼叫getRouteDirection();时,selectedRouteName可能仍处于先前状态。

因此要在设置状态后触发getRouteDirection();。 您可以使用效果并将selectedRouteName作为第二个参数传递(这实际上是一种优化,因此效果只有在selectedRouteName发生更改时才会触发)

这应该可以解决问题:

useEffect(() => {
  getRouteDirection();
}, [selectedRouteName]);

但是,如果您可以提供Stackblitz或类似产品,则可以在其中重现问题。我们绝对可以为您提供更好的帮助。

答案 1 :(得分:0)

setState是异步!很多时候,React看起来像它以同步方式更改了组件的状态,但不是那样。