如何从Navigator中导航?

时间:2019-02-28 09:09:06

标签: javascript reactjs react-native react-navigation onesignal

  

Navigator.js

const App = createStackNavigator({
  screenA: { screen: ScreenA },
  screenB: { screen: ScreenB }
})

const Navigator = createAppContainer(App);

export default Navigator;
  

App.js

return (
  <SafeAreaView>
    <Provider store={store}>
      <MainNavigator />
    </Provider>
  </SafeAreaView>
)

上面的代码是我配置React-Navigation V3的方式。在App.js上,它还订阅如下的推送通知事件

componentDidMount() {
  OneSignal.addEventListener('opened', this.onOpened);
}

onOpened = ({ notification }) => {
  //How to navigate to screenB?
}

所以我的问题是,由于App.js没有被MainNavigator包装,因此预订的事件如何将用户导航到特定屏幕?

2 个答案:

答案 0 :(得分:2)

我建议您在导航器中使用onesignal。它将按预期工作。 但是,在您的问题中,您询问了一种在导航器之外导航的方法。这是执行此操作的伪代码。

        <Navigation ref={nav => { this.navigator = nav; }} />

获取导航的参考,this.navigator将具有许多属性。包括导航。

然后您可以执行类似的操作

goToSomething = () => {

 console.log(this.navigator); //check all the methods it has
 this.navigator._navigation.navigate('Something');
 // NOTE: here it is _navigation, not navigation
}

  <Navigation ref={nav => { this.navigator = nav; }} />
<YourComponent goToSomething={this.goToSomething}/>

,我看到您已经使用过onesignal,所以不需要。在您的第一个屏幕中使用听众。

答案 1 :(得分:1)

您可以创建一个Configure参考。

public void Click_btnBewerk(object sender, RoutedEventArgs e)
    {
        string vzitter2 = txtVZitter.Text;
        string info2 = txtInfo.Text;
        string zetels2 = txtZetels.Text;
        string stroming2 = txtStroming.Text;
        string partij = cmPartijen.Text;
        conn.Updateinfo();
    }     

在此处查看更多信息:Navigating without the navigation prop

或者,您可以将订阅向下移动以将通知下推一个级别。