React / Recoil-setAtom新值何时可用?

问题描述

我试图了解React Recoil以及何时有可用的更新原子值,或者如何使新值在应用程序中垂直和水平传播。

例如,如果我有一个名为userState的原子,并且更新了avatar_url之类的属性之一,那么如果我在setUser之后立即进行控制,则该值不是新值。

const [user,setUser] = useRecoilState(userState);

setUser({ avatar_url: imageURL,...appUser});

console.log(imageURL); // is the actual new URL
console.log(user.avatar_url); // should be new URL but isn't

解决方法

与Recoil无关,但与React无关,on the next render的更新值可用,因为setState(基于Recoil的)是异步的。

setState()不会立即突变this.state,而是会创建一个 等待状态转换。调用后访问this.state 方法可能会返回现有值。没有 保证对setState的调用同步运行,并且调用可以 分批获得性能提升。

您应使用useEffect模拟此行为:

const [user,setUser] = useRecoilState(userState);

setUser({ avatar_url: imageURL,...appUser});

useEffect(() => {
  console.log(user.avatar_url);
},[user]);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...