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

移动端应用白屏报错Type Error: Assignment to constant,网页端正常是什么原因?

错误原因

  • 核心问题是你直接对const声明的变量二次赋值:通过const [access_token, setAccessToken] = useState()解构出的access_token、refresh_token都是只读常量,你在else分支直接执行access_token = xxx、refresh_token = xxx的操作,违反了const的语法规则,必然会抛出Type Error: Assignment to constant错误。
  • 网页端能正常运行大概率是两个原因:一是网页端运行时access_token初始就存在有效值,没有触发else分支的赋值逻辑;二是部分浏览器JS引擎在非严格模式下对这类错误做了降级兼容,没有直接抛出阻断运行的异常,而移动端的JS引擎(比如React Native/小程序的JS核心)语法校验更严格,直接抛出错误导致白屏。
  • 如果你使用的是React Native这类跨端移动端框架,额外需要注意:移动端环境本身没有浏览器的localStorage原生API,直接调用也会触发异常,但你当前的报错首先是常量赋值导致的。

修复方案

修改状态赋值逻辑,不要直接操作const声明的状态变量,使用useState对应的setter方法更新状态,同时将本地存储读写逻辑调整到合理的执行时机,避免每次组件渲染都重复执行:

// 初始化state时直接从本地存储读取默认值,避免后续额外赋值
const [access_token, setAccessToken] = useState(() => {
  return JSON.parse(localStorage.getItem('access_token'))
});
const [refresh_token, setRefreshToken] = useState(() => {
  return JSON.parse(localStorage.getItem('refresh_token'))
});

// 监听token变化,有值时自动同步到本地存储
useEffect(() => {
  if (access_token) {
    localStorage.setItem('refresh_token', JSON.stringify(refresh_token));
    localStorage.setItem('access_token', JSON.stringify(access_token));
  }
}, [access_token, refresh_token])

如果你用的是React Native/小程序等无localStorage的移动端环境,需要将上述代码中的localStorage替换为对应平台支持的存储方案(比如React Native用@react-native-async-storage/async-storage,小程序用wx.setStorageSync等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:03