reactjs - 如何根据同一周期的状态有条件地运行 useEffect

标签 reactjs react-native asynchronous react-hooks race-condition

我有一系列事件,其中一个事件必须依赖于前一个事件的执行而发生。

const [token, setToken] = useState('')
const getToken = async () => {
    try {
        const newToken = await AsyncStorage.getItem(LOGIN_TOKEN)
        setToken(newToken)
    } catch (err) {
        throw new Error(err)
    }
}

useEffect(() => {
    getToken()
    if(token) {
        console.log("the final event")
    }
}, [postAction])

我有 useEffect Hook ,每次 postAction 更改时都会运行。我希望仅当 getToken 运行并检索 token 时才发生“最终事件”。 我相信 setToken setter 的异步性质没有及时发生设置 token 以满足 if 语句的条件>。因此,最终事件永远不会在第一次运行时执行。

最佳答案

您可以添加另一个 useEffect Hook ,专门查找 token 的更改。

useEffect(() => {
  getToken();
}, [postAction]);

useEffect(() => {
  if(token) {
    console.log("the final event")
  }
}, [token]);

关于reactjs - 如何根据同一周期的状态有条件地运行 useEffect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58886137/

相关文章:

typescript - 使用 TypeScript 在 React Native 中创建自定义组件

javascript - 如何使用 Bootstrap 在 React.js 中显示图像

javascript - 将钩子(Hook)置于某种状态

javascript - 有没有办法在不改变其位置的情况下更改对象数组中的项目?

python - twisted的Deferred是如何实现的?

c++ - 使用异步添加二叉树成员编译失败

java - Spring Boot中方法调用的标准输出重定向的另一种方式

javascript - 使用 Webpack HtmlWebpackPlugin

javascript - React 对象在两个 View 中呈现不同的效果

react-native - React Native - 导航栏中的矢量图标