Reactjs 调度方法是同步的吗?

Reactjs 调度方法是同步的吗?,reactjs,Reactjs,对于下面的代码,我想将一个实体加载的成功与另一个实体加载的成功联系起来。但是,loadEntity中的.then(suces..)在状态可用之前返回 我假设setEntity是异步的,那么使用另一个依赖于实体状态的useEffect()的最佳方法是什么呢 const [entity, setEntity] = useState(); const loadEntity = async () => { try { const respo

对于下面的代码,我想将一个实体加载的成功与另一个实体加载的成功联系起来。但是,loadEntity中的.then(suces..)在状态可用之前返回

我假设setEntity是异步的,那么使用另一个依赖于实体状态的useEffect()的最佳方法是什么呢

  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
。感谢您的评论和反馈。