Reactjs 调度方法是同步的吗?
对于下面的代码,我想将一个实体加载的成功与另一个实体加载的成功联系起来。但是,loadEntity中的.then(suces..)在状态可用之前返回 我假设setEntity是异步的,那么使用另一个依赖于实体状态的useEffect()的最佳方法是什么呢Reactjs 调度方法是同步的吗?,reactjs,Reactjs,对于下面的代码,我想将一个实体加载的成功与另一个实体加载的成功联系起来。但是,loadEntity中的.then(suces..)在状态可用之前返回 我假设setEntity是异步的,那么使用另一个依赖于实体状态的useEffect()的最佳方法是什么呢 const [entity, setEntity] = useState(); const loadEntity = async () => { try { const respo
const [entity, setEntity] = useState();
const loadEntity = async () => {
try {
const response = await axios.get('myurl');
setEntity(response.data);
return true;
}catch (error) {
//show error message
return false;
}
}
useEffect(() => {
loadEntity()
.then (success => {
if (success) {
loadAnotherEntity(entity.referenceId);
}
}
}, [entityId]);
是的,你说得对。Set state是异步的,这些调用是批处理的,以提高性能。您可以将回调作为setEntity的第二个参数,该参数将在设置状态后执行,或者如您所说,在依赖项数组中对entity具有另一个useEffect。我会和你一起去useEffect@szczocik几乎,react的
this.setState
或useState
更新程序是100%同步的,它们既不返回承诺,也不能等待。异步的是排队状态更新,在渲染周期之间分批处理。在javascript中,async
有一个非常具体的含义,它不一定等同于说某些代码或逻辑是异步的useState
的状态更新程序也只接受一个参数,它没有像基于类的组件的那样的回调函数。setState
有。我可以更正。感谢@DrewReese对它的澄清!您是否要求在链中使用loadentity
中的更新状态调用loadentity
?如果您有一个简单的链,如示例代码段中所示,则可以为下一个链返回response.data
(与true相对),然后可以。正如szczocik指出的,状态不会立即更新,在渲染周期内,您仍然可以访问当前状态值。我建议使用第二种效果对值更改作出“反应”,并依赖于entity.referenceId
。感谢您的评论和反馈。