从反应导航组件返回时,不会调用.WillMount

时间:2017-09-18 12:52:53

标签: react-native-android react-navigation

我已经使用了反应导航,并且在android中点击了硬件后退按钮,我回到了之前的组件,但是没有调用componentWillMount。如何确保调用componentWillMount?

2 个答案:

答案 0 :(得分:0)

@bumbur的回答是否对您有帮助?它定义了一个全局变量,用于跟踪导航状态是否已更改。您可以插入一段代码以查看您是否在您感兴趣的特定选项卡中。您可以触发对componentWillMount()的调用吗?

  

如果您不想使用redux,这就是您可以在全球范围内存储的方式   有关当前路线的信息,因此您可以检测到标签更改   并告诉我哪个标签现在有效。

https://stackoverflow.com/a/44027538/7388644

export default () => <MyTabNav
    ref={(ref) => { this.nav = ref; }}
    onNavigationStateChange={(prevState, currentState) => {
         const getCurrentRouteName = (navigationState) => {
         if (!navigationState) return null;
         const route = navigationState.routes[navigationState.index];
         if (route.routes) return getCurrentRouteName(route);
         return route.routeName;
    };
    global.currentRoute = getCurrentRouteName(currentState);
  }}
/>;

答案 1 :(得分:0)

当您进入新屏幕/返回屏幕时,

componentWillMount将不会触发。

我的解决方案是使用事件导航器处理程序 https://wix.github.io/react-native-navigation/#/screen-api?id=listen-visibility-events-in-onnavigatorevent-handler

您可以在触发'willAppear'事件ID时实现'componentWillMount'代码,请参阅此实现:

def onValidate(self, d, i, P, s, S, v, V, W):
    if self._is_number(S):
        return True
    else:
        self.bell()
        return False

def _add_widgets(self):
    vcmd = (self.register(self.onValidate), '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
    self.f_entry = ttk.Entry(self.window, width=5, validate="all", textvariable=self.fahrenheit, validatecommand=vcmd).grid(row=1, column=2)