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

如何将变量导出至AsyncStorage?能否将authActions.js的user_id导出到auth.js的USER_KEY?

Hey there, let's break down your two questions one by one:

1. 如何将变量导出至AsyncStorage?

首先得澄清一下:AsyncStorage 是 React Native 里用于持久化存储键值对的工具,不是用来「导出」变量的——我们是把变量存储到 AsyncStorage 中,之后可以在其他组件/文件中读取它。

结合你提供的 loginUser 函数,你可以在获取到 user_id 和 token 后,调用 AsyncStorage.setItem() 来存储它们。注意这个方法返回的是 Promise,所以要正确处理异步逻辑:

import AsyncStorage from '@react-native-async-storage/async-storage'; // 别忘了导入

export function loginUser(email, password) {
  return function (dispatch) {
    return axios.post(SIGNIN_URL, { email, password })
      .then(async (response) => { // 标记为async以使用await
        var { user_id, token } = response.data;
        console.log('my user_id = ' + user_id);
        console.log('my token = ' + token);

        // 存储user_id和token到AsyncStorage
        try {
          await AsyncStorage.setItem('user_id', user_id.toString()); // 数字类型建议转字符串存储
          await AsyncStorage.setItem('auth_token', token);
        } catch (e) {
          console.error('Failed to save data to AsyncStorage', e);
        }

        dispatch(authUser(user_id));
        isSignedIn();
      })
      .catch((error) => {
        // 补充你的错误处理逻辑
        console.error('Login failed', error);
      });
  }
}

之后如果需要在其他地方读取存储的 user_id,可以用以下方式:

const getStoredUserId = async () => {
  try {
    const userId = await AsyncStorage.getItem('user_id');
    if (userId !== null) {
      // 成功获取到user_id,可用于后续逻辑
      return userId;
    }
  } catch (e) {
    console.error('Failed to fetch user_id from AsyncStorage', e);
  }
}
2. 是否可以将authActions.js中生成的user_id变量导出到auth.js的USER_KEY常量中?

答案是不建议也不符合常量的设计逻辑。原因很简单:USER_KEY 作为常量,通常是一个固定的字符串(比如用来标识存储键的名称,比如 const USER_KEY = 'stored_user_id'),而 user_id 是用户登录后动态获取的、每个用户都不一样的值,不能把动态值赋值给一个声明为常量的变量。

正确的做法应该是:

  • 在 auth.js 中定义固定的存储键常量:
    // auth.js
    export const USER_KEY = 'stored_user_id';
    export const TOKEN_KEY = 'stored_auth_token';
    
  • 然后在 authActions.js 中导入这些常量,用它们来存储动态的 user_id 和 token:
    // authActions.js
    import { USER_KEY, TOKEN_KEY } from './auth';
    import AsyncStorage from '@react-native-async-storage/async-storage';
    
    export function loginUser(email, password) {
      return function (dispatch) {
        return axios.post(SIGNIN_URL, { email, password })
          .then(async (response) => {
            var { user_id, token } = response.data;
    
            // 使用auth.js里的常量作为存储键
            try {
              await AsyncStorage.setItem(USER_KEY, user_id.toString());
              await AsyncStorage.setItem(TOKEN_KEY, token);
            } catch (e) {
              console.error('Storage error', e);
            }
    
            dispatch(authUser(user_id));
            isSignedIn();
          })
          .catch((error) => {
            console.error('Login error', error);
          });
      }
    }
    
  • 之后如果在 auth.js 中需要获取这个动态的 user_id,可以通过 AsyncStorage 读取:
    // auth.js
    import AsyncStorage from '@react-native-async-storage/async-storage';
    export const USER_KEY = 'stored_user_id';
    
    export const getCurrentUserId = async () => {
      try {
        return await AsyncStorage.getItem(USER_KEY);
      } catch (e) {
        console.error('Failed to get user ID', e);
        return null;
      }
    }
    

这样既符合常量的用途,又能在需要的地方获取到动态的 user_id 值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:04