Как условно отрендерить разные экраны в Stack Navigator в зависимости от реквизита

Можно ли визуализировать другой экран в StackNavigator в зависимости от реквизита, параметров или состояния?

Я думал о чем-то похожем ниже, но в настоящий момент я не могу понять, как разрешить stackNavigator иметь область действия над параметрами экрана.

export const MainNavigation = StackNavigator({
  Interests: {
    screen: navigation.state.params.interests ? InterestsScreen : ChooseInterestsScreen,
  },
  Home : {
    screen: HomeTab,
  },
}, {
  mode: 'modal',
  headerMode: 'none',
});

У кого-нибудь есть идеи по этому поводу? Спасибо!!

2 ответа

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

пример

const InterestsContainer = (props) => {
  return (props.navigation.state.params.interests ? InterestsScreen : ChooseInterestsScreen );
}

export const MainNavigation = StackNavigator({
  Interests: {
    screen: InterestsContainer,
  },
  Home : {
    screen: HomeTab,
  },
}, {
  mode: 'modal',
  headerMode: 'none',
});

Вы должны передать эту логику условного рендеринга InterestsScreen компонент, так что внутри его метода рендеринга, проверьте, если this.props.navigation.state.params.interests существует и содержит значения, а если нет, отображает измененную версию ChooseInterestsScreen как модал.

Другие вопросы по тегам