导航组件/屏幕是否必须卸下?

时间:2019-02-11 08:40:41

标签: react-native react-navigation

我正在尝试以不同的方式来构建具有反应导航和 我想知道我的应用程序组件是否必须卸载。

在React-Navigation DrawerNavigator和TabNavigator中,当组件处于非活动状态时是否将组件装入并放置在内存中,是否会导致某些性能问题?

我不知道,如果只是从屏幕切换到安装它们的屏幕是导航的最佳方法吗?

让我们说我的应用程序树就像:

-应用

---- stack1
     ---- stack1page1
     ---- stack1page2
     ---- stack1page3

---- stack2
     ---- stack2page1
     ---- stack2page2
     ---- stack2page3

---- stack3
     ---- stack3page1

---- stack4
     ---- stack4page1
     ---- stack4page2

首先,我创建了一个materialBottomTabNavigator,用于在所有堆栈(stack1,stack2,stack3和stack4)内进行切换。 但是当我访问所有堆栈时,所有堆栈都已安装,我在问自己,这是一个问题吗?

所以现在我要用另一个方法来做,尝试在切换到另一个堆栈时卸除每个堆栈,现在我问自己,这是一个问题吗?

大声笑,请帮我提供一些不错的论点:)

反应性:0.57.8 反应导航:3.1.5

谢谢大家

2 个答案:

答案 0 :(得分:0)

当您使用StackNavigator或TabNavigator时,要卸载哪个组件完全取决于用户要离开它还是返回它。

请考虑以下情况,如React-navigation的文档所述-

  

考虑一个带有屏幕A和B的堆栈导航器。导航到A后,将调用其componentDidMount。推入B时,它的componentDidMount也被调用,但是A保持安装在堆栈上,因此它的componentWillUnmount不被调用。

     

从B返回到A时,将调用B的componentWillUnmount,但是A的componentDidMount并不是因为A始终保持挂载状态。

我建议您阅读文档上的“导航生命周期”。这是链接-

  

https://reactnavigation.org/docs/en/navigation-lifecycle.html

答案 1 :(得分:0)

感谢您的回答。

我的问题是关于TabNavigator和DrawerNavigator,而不是关于StackNavigator,这有很大的不同。 我已经知道,当您从A切换到B并回到A时,组件B已安装和卸载。 我正在使用一些StackNavigator,但没有问题。

事实是,您不能总是将StackNavigators用于复杂的应用程序。

所以:

我想知道是否使用 Tab或抽屉导航器,当我们从屏幕切换到另一个屏幕时是否需要卸载组件,或者是否可以组成我的导航器的屏幕都已安装。

示例

TabNavigator --- stack1 --- stack2 --- stack3

在此处输入stack1上的应用程序,然后切换到stack2,然后再切换到stack3。 使用TabNavigator的默认配置,将安装所有堆栈(或此处的堆栈内部组件)。

这是性能问题吗? 例如,当我从stack1切换到stack2时,是否必须卸载组件?