标签: react-navigation-v5

React Navigation(原生)V5:深色主题问题。抽屉导航器切换按钮与背景没有对比。包括屏幕截图

我正在像这样设置导航容器的主题

import {
  NavigationContainer,
  DefaultTheme,
  DarkTheme,
} from "@react-navigation/native";

export default function Navigation() {
  const colorScheme = useColorScheme();
  return (
    <NavigationContainer
      linking={LinkingConfiguration}
      theme={colorScheme === "dark" ? DarkTheme : DefaultTheme}
    >
      <RootNavigator />
    </NavigationContainer>
  );
}
Run Code Online (Sandbox Code Playgroud)

我有一个堆栈导航器,在堆栈导航器内我有一个抽屉式导航器,如下所示:

// Root Navigator
export default function RootNavigator() {
  return (
    <Stack.Navigator id="root-navigation-navigator" initialRouteName={initialRouteName}>
      <Stack.Screen
        name="Root"
        component={DrawerNavigator}
        options={{
          headerShown: false,
        }}
      />
      {/* Other Screens */}
    </Stack.Navigator>
  );
}
Run Code Online (Sandbox Code Playgroud)
// Drawer Navigator
export default function DrawerNavigator(props) {
  return (
    <Drawer.Navigator
      initialRouteName="UserSettings"
      drawerContent={(props) => <CustomDrawerContent {...props} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-navigation react-navigation-drawer react-navigation-v5

8
推荐指数
0
解决办法
847
查看次数

如何使用 React Navigation 5.x 在不同的选项卡中重置堆栈

我的应用程序有一个 TabNavigator,每个选项卡中都有一个 StackNavigator。通过单击不同的选项卡在堆栈之间导航时,我不会重置堆栈,因此当您更改选项卡时,堆栈包含以前的状态。但是,偶尔从一个选项卡中的屏幕中,我想导航到不同选项卡中的特定屏幕,在这种情况下,我想重置目标选项卡中的堆栈。

TabNavigator
    Tab1 
      StackNavigator
         - ScreenA
         - ScreenB
    Tab2
      StackNavigator
         - Screen1
         - Screen2
Run Code Online (Sandbox Code Playgroud)

我希望能够在 Screen2 上放置一个按钮来重置 Tab1 上的堆栈。

我想知道此处文档中提到的“目标”参数是否有帮助,但没有关于如何使用它的示例。https://reactnavigation.org/docs/navigation-actions/

(我在这里搜索过,但为 4.x 建议的答案似乎不再适用)。谢谢!

react-native-navigation react-navigation react-navigation-v5

7
推荐指数
1
解决办法
2121
查看次数

如何在 Tab Navigator React Navigation 5 中始终设置 Stack Navigator 的第一个屏幕

反应导航 5

我在 TabNavigator 内部构建了一个 StackNavigator,并且主屏幕和其他屏幕之间的导航正在工作。但问题是,当我从 Tab2 移动到 Tab1 时,我希望 Tab1 总是显示我 StackNavigator 的第一个屏幕。

tab1
   -> Stack
        -screen1
        -screen2
tab2
Run Code Online (Sandbox Code Playgroud)

我在 screen2 上,然后移到 tab2 然后我移回 Tab1 我想总是显示 screen1。

我尝试使用

OnTabPress({navigation})=>{
    navigation.navigate("stackName",{
     screen: "screen1"
   }).
}
Run Code Online (Sandbox Code Playgroud)

它的工作,但它首先显示我 screen2 然后导航到 screen1。有没有其他解决方案。 https://snack.expo.io/@usamasomy/groaning-donut

react-native stack-navigator react-navigation-v5

7
推荐指数
1
解决办法
5059
查看次数

如何重置嵌套导航器 (react-navigation v5)

有两组堆栈导航器;

const SetOneScreens = () => (
  <Stack.Navigator initialRouteName="AScreen">
    <Stack.Screen name="AScreen" component={AScreen} />
    <Stack.Screen name="BScreen" component={BScreen} />
  </Stack.Navigator>
);
const SetTwoScreens = () => (
  <Stack.Navigator initialRouteName="CScreen">
    <Stack.Screen name="CScreen" component={CScreen} />
    <Stack.Screen name="DScreen" component={DScreen} />
  </Stack.Navigator>
);
Run Code Online (Sandbox Code Playgroud)

哪些嵌套在抽屉导航器中

    <NavigationContainer>
      <Drawer.Navigator initialRouteName="SetOneScreens">
        <Drawer.Screen name="SetOneScreens" component={SetOneScreens} />
        <Drawer.Screen name="SetTwoScreens" component={SetTwoScreens} options={{swipeEnabled: false}} />
      </Drawer.Navigator>
    </NavigationContainer>
Run Code Online (Sandbox Code Playgroud)

我想从导航BScreenDScreen并重置堆栈(为了不让android中的硬件后退按钮返回BScreen

在嵌套的情况下,我们应该首先定义导航器名称;我应该如何在重置操作中定义屏幕。

// For navigation 
props.navigation.navigate('setTwoScreens',{screen:'DScreen'})

// For reset I can only navigate to initial screen 
props.navigation.reset({index:0,routes:[{name:'setTwoScreens'}]})
Run Code Online (Sandbox Code Playgroud)

我应该如何处理resetwithnavigation …

reactjs react-native react-navigation react-navigation-stack react-navigation-v5

7
推荐指数
2
解决办法
3173
查看次数

如何从 react navigation v5 中的组件中获取屏幕选项?

我动态设置了“headerShown”屏幕选项,但我无法弄清楚如何从功能组件中读取选项

<Stack.Navigator
    screenOptions={{
      headerShown: showHeader
}}>
Run Code Online (Sandbox Code Playgroud)

我已经分别使用 useNavigation、useRoute 和 useNavigationState 尝试了组件内的导航、路由和状态对象,但似乎没有一种方法可以获取屏幕选项值。

react-navigation react-navigation-v5

7
推荐指数
1
解决办法
271
查看次数

如何在 StackNavigator 中卸载模糊的屏幕?

我正在使用React Navigation x5,我正在StackNavigator加载一堆屏幕。unmountOnBlur我想在模糊时卸载一个特定的屏幕组件,以获得与使用DrawerNavigator.

我怎样才能做到这一点?

react-native react-navigation-stack react-navigation-v5

7
推荐指数
1
解决办法
2万
查看次数

选项卡导航器屏幕上的 IntialParams 未定义(反应导航 v5)

我正在尝试将initialParam 属性传递到TabNavigator 屏幕。它旨在成为本地状态的登录部分,只是进行概念验证。它在堆栈导航器屏幕上运行良好,但route.params选项卡屏幕上的 未定义。我究竟做错了什么?

另外,我很确定就状态管理而言,这必须改变,但我想确保我可以简单地更改父级中的状态App并使其生效。它在堆栈屏幕上工作,这意味着我可以调用它setLoggedIn(true),它将带我到选项卡导航器。但我已经回不去了...

const Track = () => {
  return (
    <TrackStack.Navigator>
      <TrackStack.Screen
        name='TrackListScreen'
        component={TrackListScreen}
      />
      <TrackStack.Screen
        name='TrackDetailScreen'
        component={TrackDetailScreen}
      />
    </TrackStack.Navigator>
  );
};

const App = () => {
  const [loggedIn, setLoggedIn] = useState(false);

  return (
    <NavigationContainer>
      {loggedIn ? //is logged in 
        (
          <MainTab.Navigator>
            <MainTab.Screen
              name='TrackCreateScreen'
              component={TrackCreateScreen}
              initialParams={{ setLoggedIn }}
            />
            <MainTab.Screen
              name='AccountScreen'
              component={AccountScreen}
            />
            <MainTab.Screen
              name='Track'
              component={Track}
            />
          </MainTab.Navigator>
        ) : (
          <LoginStack.Navigator>
            <LoginStack.Screen
              name='SignupScreen'
              component={SignupScreen}
              initialParams={{ setLoggedIn }}
            />
            <LoginStack.Screen …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation react-navigation-v5

6
推荐指数
0
解决办法
401
查看次数

从嵌套子屏幕访问父堆栈导航器的导航对象

我在我的react-native项目中使用React Navigation v5。

我有一个嵌套的堆栈导航器。

父堆栈导航器MyParentFlow有一个托管另一个堆栈导航器的屏幕组件:

const MyParentFlow = ({route, navigation}) => {

   const MyStack = createStackNavigator();

  return (
    <MyStack.Navigator
       initialRouteName={...}
       ...>
       {/*HERE is the nested children stack navigator*/}
       <MyStack.Screen
         name={FLOWS.MyChildrenFlow}
         component={MyChildrenFlow}
       />
       <MyStack.Screen .../>
       ...
    </MyStack.Navigator>
)
}
Run Code Online (Sandbox Code Playgroud)

我的嵌套堆栈导航器MyChildrenFlow

const MyChildrenFlow = ({route, navigation}) => {

   const MyStack = createStackNavigator();


  return (
    <MyStack.Navigator
       initialRouteName={...}
       ...>
       {/*HERE is a child screen in the nested navigator*/}
       <MyStack.Screen 
         name="MyChildScreen"
         component={MyChildScreen}
       />
       <MyStack.Screen .../>
       ...
    </MyStack.Navigator>
)
}
Run Code Online (Sandbox Code Playgroud)

在嵌套堆栈导航器托管的子屏幕中:

const …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation react-navigation-v5

6
推荐指数
1
解决办法
2872
查看次数

如何隐藏底部选项卡导航器中的标签反应导航v5

我试图隐藏标签。并且showLabel: false不工作。

import React, {useLayoutEffect} from 'react';
import {createStackNavigator} from '@react-navigation/stack';
import {useNavigation} from '@react-navigation/native';

import HomeTopTabNavigator from '../routes/home.top.tab';
import {NAVIGATOR} from '../constants/screen.constants';
import THEME from '../constants/theme.constants';
import Icon from '../components/atoms/Icon';

const HomeStack = createStackNavigator();

function HomeStackNavigator() {
  const navigation = useNavigation();

  useLayoutEffect(() => {
    navigation.setOptions({
      showLabel: false,
      tabBarIcon: () => (
        <Icon
          type="MaterialCommunityIcons"
          name="home"
          size={24}
          color={THEME.PRIMARY}
        />
      ),
    });
  }, [navigation]);

  return (
    <HomeStack.Navigator
      screenOptions={{headerStyle: {elevation: 0, shadowOpacity: 0}}}>
      <HomeStack.Screen
        name={NAVIGATOR.HomeTopTab}
        component={HomeTopTabNavigator}
      />
    </HomeStack.Navigator>
  );
}

export …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation-bottom-tab react-navigation-v5

6
推荐指数
1
解决办法
1万
查看次数

如何访问 Screen 组件内的 NavigatorScreen &gt; 选项?

有什么方法可以访问组件options内的导航器屏幕对象Home吗?

    <Stack.Navigator>
        <Stack.Screen
            name="Home"
            component={Home}
            options={
                {
                    /** some options... */
                }
            }
        />
        <Stack.Screen name="About" component={About} />
    </Stack.Navigator>
Run Code Online (Sandbox Code Playgroud)

function Home() {
    /** Get options object here */
    return (
        /** some jsx */
    );
}
Run Code Online (Sandbox Code Playgroud)

我正在使用反应导航5

react-native react-navigation react-navigation-v5

6
推荐指数
1
解决办法
721
查看次数