React native 反应寿命循环和异步存储
我正在创建一个应用程序,它通过异步存储传递一些重要信息,但现在在另一个屏幕上更新时出现问题。。。。让我们看看: 在屏幕1上: 从componentDidMount上的异步存储加载数据React native 反应寿命循环和异步存储,react-native,react-lifecycle,React Native,React Lifecycle,我正在创建一个应用程序,它通过异步存储传递一些重要信息,但现在在另一个屏幕上更新时出现问题。。。。让我们看看: 在屏幕1上: 从componentDidMount上的异步存储加载数据 componentDidMount() { AsyncStorage.getItem("userChats").then((value) => { this.setState({userChats: JSON.parse(value)});
componentDidMount() {
AsyncStorage.getItem("userChats").then((value) => {
this.setState({userChats: JSON.parse(value)});
});
}
然后在屏幕2上,我修改用户聊天
我希望当再次回到屏幕1时,屏幕2上所做的更改会反映在屏幕1上,但不会出现,因为componentDidMount不会再次触发
正确的方法是什么
感谢您,componentDidMount是一种生命周期方法。从Screen1导航到Screen2不会卸载Screen1。因此,当您从屏幕2返回到屏幕1时,屏幕1没有安装,因为它没有卸载。因此,
componentDidMount
不被调用
正确的做法是什么?
您应该使用上下文API
。从AsyncStorage
加载时,也将该值设置为Context。更新值时,将更改写入异步存储和上下文
备注:异步存储
可能不需要。这取决于你的要求。很可能,只有使用上下文API
才能实现这一点
请检查以下零食。这是用钩子做的。可以使用类组件执行相同的操作
更新:
如果要处理的数据太大,不建议使用上下文,因为它将所有数据保存在设备RAM中,并且消耗太多RAM可能会导致应用程序崩溃
在不使用上下文的情况下执行此操作:
(1) 定义从异步存储
检索数据的函数
loadData() {
AsyncStorage.getItem("userChats").then((value) => {
this.setState({userChats: JSON.parse(value)});
});
}
(2) 在componentDidMount
中调用它
componentDidMount() {
this.loadData()
}
(3) 导航到屏幕2时,将回调函数作为道具传递给调用loadData
函数
this.props.navigation.navigate('Screen2', {
onGoBack: () => this.loadData(),
});
(4) 然后在屏幕2中,在goBack
之前,您可以执行以下操作:
await AsyncStorage.setItem('userChats', updatedData);
this.props.navigation.state.params.onGoBack();
this.props.navigation.goBack();
然后,在屏幕2中调用loadData
函数
PS:由于使用
state
存储从AsyncStorage
检索到的数据,因此也可以直接将它们加载到上下文中并使用。但是,请记住,使用太多内存可能会导致应用程序崩溃。谢谢!我来看看!我可以在上下文中存储任何类型的变量吗?一个相当大的JSON(所有的用户聊天,比如电报)?@MarcoMartin是的,你可以存储任何类型的变量。但是,在这种情况下,大小很重要。当您在上下文中存储如此大的数据时,这些数据将保存在设备RAM中。因此,占用太多资源可能会导致应用程序崩溃。