刷新goBack上的前一个屏幕()

问题描述:

我是新来的react-native。我们如何通过调用goBack()来刷新/重新载入前一个屏幕?刷新goBack上的前一个屏幕()

比方说,我们有3个屏幕A,B,C

A -> B -> C 

当我们运行在C不言而喻B屏但老态/数据GoBack的()。我们如何刷新它?构造函数不会第二次调用。

+0

你有解决这个问题吗?请让我知道,我也面临同样的情况。我解决了它。 –

+0

是的@DeepakSachdeva谢谢,但你可能会分享你的发现的知识。 以下帮助我 https://stackoverflow.com/a/46892405/2086124 –

+0

我不知道你是如何具体解决这个问题,因为我有同样的问题。您参考下面的答案,但是@Bat用户提供的三个选项中的哪一个?如果你回答自己的问题并提供解决问题的详细信息,情况会好很多。因为,这对真正帮助那些将来会遇到同样问题的人是很有帮助的。希望你可以发布它。上帝保佑。 – Edper

是的,只有第一次调用构造函数,而且不能调用它两次。

首先:但是你可以从构造数据的getter/setter分开,把它放在一个功能,这样您可以向下传递函数进入下一场景,每当你回去,你可以简单地回顾一下功能。

更好:您可以在第一个场景中制作返回功能,该功能还可以在返回时将场景更新并将返回功能关闭。这样第二个场景就不会意识到你的更新功能是合理的。

最好:您可以在第二个场景中使用redux并分派返回操作。然后在你的减速器中,你照顾回去&刷新你的场景。

如果您试图将新数据导入到先前的视图中,但它不起作用,那么您可能需要重新审视将数据传输到该视图中的方式。调用goBack不应影响先前组件的安装,并且可能不会像您所指出的那样再次调用其构造函数。

作为第一步,我会问你是否正在使用Component,PureComponentFunctional Component。根据您的构造函数注释,它听起来像是在扩展一个Component类。

如果您使用的是组件,则渲染方法将受制于shouldComponentUpdate,并且您的状态的值由您控制。

我会推荐使用componentWillReceiveProps来验证组件正在接收新数据,并确保其状态已更新以反映新数据。

如果您使用构造函数调用API或某种类型的异步函数,请考虑将该函数移动到您要调用goBack的路由的父组件以及您想要更新的组件最近的数据。然后,您可以要求您的父组件重新查询该API,或者从子组件更新其状态。

如果路由C更新应用程序的“状态/数据”,该更新应该传播到路由A,B和C的共享父路由,然后作为道具传递。

或者,您可以使用像Redux这样的状态管理解决方案来独立于父/子组件维护该状态 - 您可以将组件包装在connect高阶组件中,以便在应用程序状态更改时获取最新更新。

TL; DR最终,您的问题的答案听起来像植根于您的应用程序状态存储位置。它应该足够高地存储在组件层次结构中,以便每条路由始终从其父节点接收最新数据作为道具。

这个回答假设反应本地导航正在使用库,这是不可能的,因为它实际上并不拥有的GoBack()方法...

构造不叫第二次因为屏幕A和B仍然呈现(但隐藏在屏幕C后面)。如果您需要知道屏幕B何时会再次可见,您可以收听navigation events

class ScreenB extends Component { 
    constructor(props) { 
    super(props); 
    // Listen to all events for screen B 
    this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent); 
    } 

    onNavigatorEvent = event => { 
    switch (event.id) { 
     case 'willAppear': 
     // refresh your state... 
     break; 
    }; 
} 

其他事件:willDisappeardidAppeardidDisappear

另一种解决问题的方法是使用像Redux的状态管理解决方案,提供国家所有的屏幕时,它被更新(而不是仅仅在屏幕转换。见old react-native-nav/redux example