此功能组件具有一个调用onChangeHandler
的模板方法,该方法接受一个select
的值并更新state
。问题是,state
直到第二次调用render方法之后才更新,这意味着所选选项的值比state
的{{1}}值高一个步骤。 / p>
我知道类组件中有一些生命周期方法,可以用来强制进行selectedRouteName
更新,但是如果可能的话,我希望将其保留为功能组件。
如代码中所述,state
的记录状态是所选选项后面的一个值。如何强制selectedRouteDirection
更新为功能组件中的正确值?
此问题与类似的问题不同,因为我的问题询问用例中的实际实现,而不是是否可能。
state
答案 0 :(得分:1)
嗯,实际上..即使我仍然认为效果是正确的方法..您的console.log
位于错误的位置。.fetch
是异步的,而您的console.log
是在fetch
指令之后。
正如@Bernardo所说.. setState也是异步的
因此在您呼叫getRouteDirection();
时,selectedRouteName
可能仍处于先前状态。
因此要在设置状态后触发getRouteDirection();
。
您可以使用效果并将selectedRouteName
作为第二个参数传递(这实际上是一种优化,因此效果只有在selectedRouteName
发生更改时才会触发)
这应该可以解决问题:
useEffect(() => {
getRouteDirection();
}, [selectedRouteName]);
但是,如果您可以提供Stackblitz或类似产品,则可以在其中重现问题。我们绝对可以为您提供更好的帮助。
答案 1 :(得分:0)
setState是异步!很多时候,React看起来像它以同步方式更改了组件的状态,但不是那样。