React Native 刷新屏幕/组件/改变状态

Posted

技术标签:

【中文标题】React Native 刷新屏幕/组件/改变状态【英文标题】:React Native refresh screen / component / change state 【发布时间】:2018-08-06 10:15:00 【问题描述】:

我正在使用 react-native、嵌套的 react-navigation、SectionLists、ActionSheet 等,而且我很难设置一种体面的方式来刷新组件/屏幕。由于我有几个不同的案例,我也尝试了不同的方法,但没有成功。

示例: - 当从一个屏幕转换到另一个屏幕以更改状态时,在导航器中发送回调函数作为参数。 - 将 AsyncStorage.getItem 直接分配给状态变量(例如:在 ListView 上使用)并期望它刷新。

我在 react-navigation git repo 中看到了很多问题(主要是关于如何刷新屏幕),以及最近对项目提出的关于未来版本的最佳方法的建议,这让我问这是否是已经到位了。

我可以说,我已经成功使用 redux 来检查连接状态 (NetInfo),虽然我还不能将相同的想法移植到不同的方案中,但我认为这是我最好的方法。

目前我有一个方案,如果解决了,我相信会回答我的一些问题。例如:

我的主屏幕中有一个新闻列表,我的抽屉导航器中有一些选项,我希望在单击时对主列表进行排序,而不必像我想要的那样调用 navigate('screen_name') to, 点击后抽屉仍然保持打开状态。

对此最好的方法是什么? 提前致谢!

【问题讨论】:

【参考方案1】:

您可以采用的一种方法是: 单击 DrawerNavigator 项时,您可以调度一个操作,该操作将通过一个值更改状态。例如:过滤器:。该商店值可以作为道具传递到您的主屏幕,其中包含一个基于该值进行过滤的逻辑。

我没有使用过 DrawerNavigator,但我觉得可以阻止抽屉导航中每个项目上的 onPress,并且可以在同一位置调用操作。

【讨论】:

您好,感谢您的反馈!真的很感激。是的,那将使用 redux,我认为这绝对是解决这个问题的最佳方法。确切地说,只要不涉及“导航到”操作,我就可以让抽屉保持打开状态。必须全力以赴。我还刚刚发现,我可以通过使用 SectionList / FlatList 中的“extraData”属性来解决其他情况。

以上是关于React Native 刷新屏幕/组件/改变状态的主要内容,如果未能解决你的问题,请参考以下文章

React Native - 状态改变但组件没有重新渲染

如何使用 redux 模式在 react native 中刷新组件?

在 React Native 中将状态从子组件传递到父组件

react native 中的redux

REACT NATIVE - 关闭导入模式时更改屏幕状态

React Native移动开发实战-3-实现页面间的数据传递