You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native使用useState存储accessToken后获取值为null的问题

问题原因与解决方法

你遇到的问题核心是React的useState更新是异步的——调用setAccessToken后,state不会立刻更新,所以你紧接着打印accessToken时,拿到的还是初始的null(旧值)。

为什么会这样?

React为了性能优化,会把state更新操作放进队列,等当前代码执行完、合适的时机再批量更新state并重新渲染组件。所以在setAccessToken的下一行,accessToken的值还没来得及改变。

两种解决办法:

1. 直接用已拿到的credentials.accessToken打印

既然你已经在then回调里拿到了credentials.accessToken,没必要非要用刚设置的state来打印,直接用这个值就行:

const [accessToken, setAccessToken] = useState(null)

const onLogin = () => {
    auth0.webAuth
        .authorize({
            scope: 'openid profile email'
        })
        .then(credentials => {
            setAccessToken(credentials.accessToken)
            // 直接用credentials里的token打印
            Alert.alert('Access token: ', credentials.accessToken)
            console.log('Access token: ', credentials.accessToken)
        })
        .catch(error => console.log(error))
}

2. 用useEffect监听state变化(查看更新后的state)

如果你确实需要查看更新后的accessToken state,可以用useEffect钩子监听它的变化,当state更新时再执行打印操作:

import { useState, useEffect, Alert } from 'react'

const [accessToken, setAccessToken] = useState(null)

// 监听accessToken的变化,值更新时触发
useEffect(() => {
    if (accessToken !== null) {
        Alert.alert('Access token: ', accessToken)
        console.log('Updated access token: ', accessToken)
    }
}, [accessToken]) // 依赖数组:只有accessToken变化时才执行这个effect

const onLogin = () => {
    auth0.webAuth
        .authorize({
            scope: 'openid profile email'
        })
        .then(credentials => {
            setAccessToken(credentials.accessToken)
        })
        .catch(error => console.log(error))
}

这样当accessToken成功更新后,useEffect就会触发,此时你拿到的就是最新的state值了。

内容的提问来源于stack exchange,提问作者joshk132

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 01:09:29