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

React Native认证问题:登录/登出时导航栈未自动切换

解决Mobx AuthStore状态变化无法触发React组件更新的问题

问题原因

React组件默认不具备Mobx响应式追踪能力,直接在组件中引用Mobx Store的observable或computed属性时,组件无法感知到这些属性的变化,因此不会触发重新渲染,useEffect的依赖也不会生效。

解决方案

1. 安装Mobx React绑定库

确保项目中已安装mobx-react-lite(针对函数组件):

npm install mobx-react-lite
# 或
yarn add mobx-react-lite

2. 用observer包裹App组件

修改App.js,导入observer并包裹根组件,让组件能够追踪Mobx Store的状态变化:

import React, { useEffect } from "react";
import { NavigationContainer } from "@react-navigation/native";
import { observer } from "mobx-react-lite"; // 新增导入

import AuthStore from "./src/stores/AuthStore";
import AuthStackNavigator from "./src/navigation/AuthStackNavigator";
import UnAuthStackNavigator from "./src/navigation/UnAuthStackNavigator";

const App = observer(() => { // 用observer包裹组件
  useEffect(() => {
    console.log("APP JS", AuthStore.userAuthenticated);
  }, [AuthStore.userAuthenticated]);

  return (
    <NavigationContainer>
      {AuthStore.userAuthenticated ? <AuthStackNavigator /> : <UnAuthStackNavigator />}
    </NavigationContainer>
  );
});

export default App;

3. 优化Store重置逻辑

调整AuthStore中的logout方法,确保observable属性重置更安全:

async logout() {
  await clearStorage();
  this.user = {}; // 重置为空对象,避免后续引用user属性时出现undefined错误
  this.token = undefined;
  this.refreshToken = undefined;
  this.decodedToken = undefined;
}

原理说明

observer函数会将React函数组件转换为响应式组件,自动追踪组件中使用的Mobx observable和computed属性。当这些属性变化时,组件会自动重新渲染,useEffect的依赖数组也会触发对应逻辑。

修改后,用户登录/登出时,AuthStore的token变化会触发userAuthenticated计算属性更新,observer包裹的App组件会感知到变化并重新渲染,从而自动切换导航栈,无需重启App。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:33