Как ориентироваться откуда-то из навигатора? - PullRequest
0 голосов
/ 28 февраля 2019

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-NavigationV3.На App.js он также подписывается на события push-уведомлений, как показано ниже

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

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

Поэтому мой вопрос заключается в том, как подписанное событие может перемещать пользователя на определенный экран, поскольку App.js не переносится MainNavigator?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я бы порекомендовал использовать 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, так что это не понадобится.используйте слушателей на первом экране.

0 голосов
/ 28 февраля 2019

Вы можете создать NavigationService ref.

import { createStackNavigator, createAppContainer } from 'react-navigation';
import NavigationService from './NavigationService';

const TopLevelNavigator = createStackNavigator({ /* ... */ })

const AppContainer = createAppContainer(TopLevelNavigator);

export default class App extends React.Component {
  // ...

  render() {
    return (
      <AppContainer
        ref={navigatorRef => {
          NavigationService.setTopLevelNavigator(navigatorRef);
        }}
      />
    );
  }
}

Подробнее здесь: Навигация без навигационной опоры .

В качестве альтернативы, вы можете просто двигаться внизподписка для отправки уведомлений на один уровень ниже.

...