React native:即使在模拟器上重新加载后,State似乎仍保留以前的状态
React native: State seems to retain previous state even after reload on the simulator
我有一个代码可以做这样的事情:(伪代码)
class extends Component{
constructor(){
this.state={
condition1 : false,
condition2 : false,
condition3 : false,
condition4 : false,
}
//set all 4 condition states to true once data loading has completed from the store
}
render(){
return(
if (this.state.condition1 && this.state.condition2 && this.state.condition3 && this.state.condition4)
Render Main component
else
Render loading screen
);
}
}
基本上,我有4个状态,用于在加载主组件之前检查数据是否已加载。一旦Store(从另一个文件)完成加载数据,它就会发出一个事件,导致4个状态设置为true,从而加载主组件。然而,一旦我从Genymotion模拟器中点击重载按钮,这4种状态将保持为true,不会重置为false,导致应用程序加载主组件并崩溃。(由于数据还没有准备好)我已经尝试在ComponentWillMount方法中再次将所有4个状态重置为false,但在主应用程序尝试加载主组件之前,这些状态似乎没有及时重置为false。在生命周期的哪个组件中,我应该将状态重置为false?或者我应该忽略这个问题,因为在实际设备上重新加载应用程序是"不现实的"?
在生命周期的哪个组成部分中,我应该将状态重置为是否为false?
文档建议在渲染之前使用componentWillReceiveProps
更新状态。我已经为我的项目做了这件事,而且效果很好,不过根据您的用例,您可能需要检查newProps
与this.props
是否不同。
https://facebook.github.io/react/docs/component-specs.html
组件WillReceiveProps
在组件接收新道具时调用。此方法不是调用进行初始渲染。
利用这个机会对道具转换做出反应render()是通过使用this.setState()更新状态来调用的可以通过this.ops访问旧道具。调用this.setState()在该函数中不会触发额外的渲染。
我已经设法通过减少网络获取请求的数量来解决这个问题。似乎同时有多个网络请求会导致不稳定,尽管原因尚不清楚。
- 分派点击事件并保留击键修饰符
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- 如何将字符串拆分为字符,但在javascript中保留空格
- 离开页面导航后保留文本区域内容
- 如何在使用JavaScript或jQuery刷新父页面后保留iframe-src
- Javascript和RegEx:拆分并保留分隔符
- 如何生成保留标点符号的简单字谜
- 如何设置类型化对象的属性,同时保留它's类型
- 关闭谷歌地图中推荐的骑行道路,但保留专用自行车道
- 在$state.go之后执行$window.location.reload(true)
- 在IndexedDB中保留空间
- React native:即使在模拟器上重新加载后,State似乎仍保留以前的状态