如何将变量导出至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
相关产品推荐
相关产品推荐

