如何在堆栈导航器(react-navigation 2.X)中卸载以前安装的组件?

IT技术 reactjs react-native react-native-navigation
2021-05-22 06:32:03

这是我的应用程序的简化流程:-

  1. 登录
  2. 主页(有颜色图表或创建图表的选项)
  3. colorInDiagram(用户为图表的部分着色)
  4. 付款
  5. 主页(回到主页)

现在,在此之后,如果用户决定再次为图表着色,他/她将从主页中选择该特定选项,流程将照常继续。发生这种情况是因为付款后,用户将返回主页(已加载),并且每隔一个屏幕将重置。随着应用程序的全面发展。ComponentWillUnmount 在 colorInDiagram 中调用。

我想要处理的事情:-

如果用户在第 3 步(为图表着色)时关闭了应用程序,则在重新打开应用程序时,我已对其进行编码以从应用程序停止的位置恢复。但是当用户完成填色和支付后,他/她并没有回到首页,因为app是直接从colorInDiagram组件启动的主页首次加载。

因此,现在当用户再次从主页绑定到为图表着色时,它会加载 colorInDiagram,因为它在用户继续付款之前已停止。(它只是推送当前存在于堆栈中的组件)。在 colorInDiagram 中不调用 ComponentWillUnmount。

预期行为:-它应该是一个没有填充颜色的空白图表。就好像它是一个全新的安装一样,而不是像上次使用时那样重新渲染组件。

*可能的解决方案:-*我觉得我必须手动卸载 colorInDiagram 组件。

问题:-我如何手动卸载 React Native 组件。

另外,如果你们有任何其他见解或问题估计或解决方案,请分享!

1个回答

只是为了它可以被接受为这里的答案是我在评论部分建议的解决方案:

您可以使用StackAction.reset方法:https : //reactnavigation.org/docs/en/stack-actions.html#reset重置您的导航堆栈,其中您的屏幕渲染 colorInDiagram 不再位于堆栈中,从而卸载组件

从文档:

重置操作会擦除整个导航状态并将其替换为多个操作的结果。

import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'Profile' })],
});
this.props.navigation.dispatch(resetAction);