javascript - 如何从 Navigator 之外的某个位置进行导航?

标签 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 包装,订阅的事件如何将用户导航到特定屏幕?

最佳答案

我建议在导航器中使用 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,因此不需要它。在第一个屏幕中使用监听器。

关于javascript - 如何从 Navigator 之外的某个位置进行导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921952/

相关文章:

javascript - Jquery Animate - 使元素只弹跳一次

javascript - D3 饼图 : Uncaught Type Error - Cannot read property 'pie' of undefined

javascript - 导航到另一个页面时下一个/链接丢失状态

reactjs - 从 React Native 中的 api 拦截器(组件外部)重定向到屏幕

javascript - 是否有 'fixed header' 或 'sticky header' 用于 native react ?

javascript - 如何在框架中的元素上使用 javascript

javascript - 带有 ES6 和 webpack 的 AngularJS 1.7 给出错误 : Uncaught TypeError: Cannot read property 'module' of undefined

android - React Native Android,由于来自后台状态而同时运行的多个应用程序实例之前没有杀死应用程序

c# - 在 Silverlight 中将 ObservableCollection 转换为数组

javascript - 在 ReactJS 项目中将 noUiSlider.js 与 SurveyJS 集成