问题描述
我试图了解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]);