【发布时间】:2020-08-31 01:44:41
【问题描述】:
好吧,请对我温柔一点,我对 React Native 很陌生,但我正在使用 Context 来管理我的 React Native 项目中的一些状态。这是我被卡住的地方的一个例子
在功能组件的顶部我有这个...
import DataContext from "../../contexts/DataContext";
import AsyncStorage from "@react-native-community/async-storage";
const AccountHomepageScreen = ({navigation}) => {
const { data, updateInfo} = useContext(DataContext);
const getUserFromAsync = async () => {
try {
const value = await AsyncStorage.getItem('user_id');
if(value !== null) {
//shows user_id in Alert no problem
alert(value);
//but this does not work?!?!
updateInfo('userId', value);
}
} catch(e) {
// error reading value
return false;
}
}
}
useEffect(() => {
getUserFromAsync();
}, []);
在上下文文件 updateInfo 中做了如下操作
import React, { useState } from 'react';
const DataContext = React.createContext();
export const DataProvider = ({ children }) => {
const [info, setInfo] = useState({
userId: '',
textText: 'Connected!!!',
availableBusinesses : [],
getBusinessesError: ''
});
const updateInfo = (field, val) => {
setInfo({
...info, [field]: val
});
};
return (
<DataContext.Provider value={{
data: {info},
updateInfo
}}>
{children}
</DataContext.Provider>
);
};
export default DataContext;
【问题讨论】:
-
//but this does not work?!?!你能说得更具体点吗?你期待发生什么?您可能需要向我们展示 updateInfo 的代码是什么。 -
我实际上是在 useEffect 中调用它,我只是忘了包括它。抱歉,是的,我正在尝试使用 userID 值设置上下文
-
我也添加了DataContext文件
-
谢谢。发生了什么问题?您是否在组件主体中粘贴了日志语句(不是在使用效果或 getUserFromAsync 中)并且它没有重新渲染?
-
上下文不会随值更新。该值在那里,因为它显示在警报中。我只是不明白为什么上下文没有随脚本更新。它适用于其他任何地方。我只能假设它与调用它的异步函数有关
标签: reactjs react-native react-context