#react-native #react-navigation-v5
#react-native #react-navigation-v5
Вопрос:
Проблема: я пытаюсь условно отображать экраны в навигаторе, но он пропускает первый экран (GDPR) и переходит непосредственно к главному экрану приложения, даже если условия выполнены.
код здесь:
if (!!firstLogin amp;amp; !acceptedPrivacyPolicy) {
console.log('rendering....', !!firstLogin, !acceptedPrivacyPolicy)
return (
<FirstLoginStack.Navigator
headerMode={'none'}
screenOptions={{
cardStyleInterpolator:
CardStyleInterpolators.forHorizontalIOS
}}>
<FirstLoginStack.Screen name={'GDPR'} component={GDPR} />
<FirstLoginStack.Screen name={'AppTabs'} component={AppTabs} />
</FirstLoginStack.Navigator>
)
}
Однако, когда я использую вложенный троичный файл, он работает нормально:
return (
<AppMainStack.Navigator
headerMode={'none'}
screenOptions={{
cardStyleInterpolator:
CardStyleInterpolators.forHorizontalIOS
}}>
{firstLogin ?
<>
{!acceptedPrivacyPolicy ? <AppMainStack.Screen name={'GDPR'} component={GDPR} /> : null}
<AppMainStack.Screen name={'AppTabs'} component={AppTabs} />
</>
: <AppMainStack.Screen name={'AppTabs'} component={AppTabs} />
}
</AppMainStack.Navigator>
)
Why is this the case?
Ответ №1:
Мы можем определять разные экраны на основе некоторого условия. Например, если пользователь вошел в систему, мы можем определить Home, Profile, Настройки и т. Д. Если пользователь не вошел в систему, мы можем определить экраны входа и регистрации.
Например:
isSignedIn ? (
<>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="Settings" component={SettingsScreen} />
</>
) : (
<>
<Stack.Screen name="SignIn" component={SignInScreen} />
<Stack.Screen name="SignUp" component={SignUpScreen} />
</>
)
Это уже определенный рабочий процесс для аутентификации навигации React
Комментарии:
1. Спасибо. да, это то, что я сделал во второй части. но мой вопрос в том, почему первый не работает
2. Поскольку для рендеринга требуется stack navigator, если ваше условие становится ложным, он никогда не будет отображать дочерние элементы, определенные в нем, так что это вообще не сработает
3. да, но условия верны в обоих случаях
4. Он не будет учитывать только
if
. Этоelse
также необходимо, потому что, когда он получает только условие if, тогда он будет ожидать, что else также будет отображаться5. ценю помощь. Это неправда. «Вы должны отметить, что вам не нужно включать else и второй блок фигурных скобок». developer.mozilla.org/en-US/docs/Learn/JavaScript /…