运行 navigator.pop() 后如何刷新 React 状态?

Posted

技术标签:

【中文标题】运行 navigator.pop() 后如何刷新 React 状态?【英文标题】:How do I refresh React state after running navigator.pop()? 【发布时间】:2016-03-04 04:00:48 【问题描述】:

在使用 React Native 时,我有一些组件相互叠加,其中一些会改变它们下方组件的状态,如下所示:

社交 -> 群组 -> 添加群组

但是,当我运行 navigator.pop() 以返回到上一个组件时(例如,将组添加到用户帐户后),下面的组件(在本例中为“组”)不会刷新最新状态。

我在这里做错了什么?

【问题讨论】:

我认为这与导航器无关。您需要更改顶部组件的状态,将触发重新渲染。 【参考方案1】:

原来我可以通过在“Groups”组件上插入componentWillUpdate 来解决这个问题,也就是说,每当 Groups 组件更新时,它都会触发 loadGroupsData 函数:

componentWillUpdate() 
  this.loadGroupsData();

...loadGroupsData 函数检查任何差异,如果存在差异,则加载:

loadGroupsData() 
api.getUserGroups(this.state.userId, (data) => 
  data.forEach((group, index) => 
    group.groupname = group.groupname;
  );
  if (this.state.dataSource._cachedRowCount === undefined || this.state.dataSource._cachedRowCount !== data.length) 
    this.setState(
      usersGroups: data.map(data => data.groupname),
      dataSource: this.state.dataSource.cloneWithRows(data),
      loaded: true,
    );
  
); 

【讨论】:

我认为你不能在 componentWillUpdate 函数中设置状态。反应本机文档说。注意:您不能在此方法中使用 this.setState()。如果您需要更新状态以响应道具更改,请改用 componentWillReceiveProps。 facebook.github.io/react/docs/component-specs.html 如果我将 setState 放在 componentWillUpdate 上,会收到无休止的调用,知道如何防止这种情况发生吗?

以上是关于运行 navigator.pop() 后如何刷新 React 状态?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 从 AppBar 返回上一页不会刷新页面,使用 Navigator.pop(context)

是否可以使用 navigator.pop 刷新或重新加载页面...比如第 1(nav.push=>2)页面到第 2 页,然后从第 2(nav.pop,值)返回到第 1 页?

Navigator.pop() - 如何传递 `context` 以供导航器读取 -

Flutter Navigator.pop 再次运行小部件构建方法

如何在 Flutter 中的 navigator.pop(context) 之后显示小吃栏?

如何将 navigator.pop 传递给自定义反应原生组件