标签: react-navigation-stack

如何将导航道具传递给“ createStackNavigator”以使用带有动画的默认标题

最近几天,我一直在努力向屏幕添加动画标题。我已成功完成此操作,但现在我想默认将其用作标题,而不是将代码复制并粘贴到我希望使用的所有屏幕中。目前,动画标头已在屏幕中实现,如下所示:

渲染标题:

static navigationOptions = ({ navigation }) => {
    return {
        header: () => {
            return (
                <SafeAreaView style={{
                    height: 0,
                    overflow: 'visible',
                }}>
                    <Animated.View style={{height: 80, width: 80,
                        transform: [ {translateY: navigation.getParam('headerScrollY', 0)}]
                    }}>
                        <TouchableOpacity style={{padding: 20}} onPress={() => navigation.goBack()}>
                            <Icon.Ionicons  style={{color: '#ffffff', width: 50, height: 50}} name={'ios-arrow-round-back'} size={50} />
                        </TouchableOpacity>
                    </Animated.View>
                </SafeAreaView>
            )
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

设置状态:

constructor() {
    super();
    this.state = {
        headerScrollY: new Animated.Value(0),
    };
}
Run Code Online (Sandbox Code Playgroud)

设置动画插值并将值传递给导航道具(这是我稍后在渲染标题时将要访问的内容)

componentWillMount() {
    this.props.navigation.setParams({
        headerScrollY: this.state.headerScrollY.interpolate({
            inputRange: [0, 80], …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation react-navigation-stack

3
推荐指数
1
解决办法
574
查看次数

我无法通过 react navigation v4 解决这个捆绑错误

捆绑失败:错误:无法react-navigation-stackApp.js以下位置解析模块:在项目中找不到 react-navigation-stack。

我尝试删除节点模块并重新安装它们,清除缓存,在新的新项目中尝试相同但没有结果

Package.json 文件

{
  "name": "navigator",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "react": "16.9.0",
    "react-native": "0.61.2",
    "react-native-gesture-handler": "^1.4.1",
    "react-native-reanimated": "^1.3.0",
    "react-native-screens": "1.0.0-alpha.23",
    "react-navigation": "^4.0.10"
  },
  "devDependencies": {
    "@babel/core": "^7.6.2",
    "@babel/runtime": "^7.6.2",
    "@react-native-community/eslint-config": "^0.0.5",
    "babel-jest": "^24.9.0",
    "eslint": "^6.5.1",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.56.0",
    "react-test-renderer": "16.9.0"
  },
  "jest": {
    "preset": "react-native"
  }
}
Run Code Online (Sandbox Code Playgroud)

应用程序.js

    import React from 'react';
    import { …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation react-navigation-stack

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

在 React Navigation 5 中传递参数

我正在尝试在选项卡导航器之间传递一些参数。下面是我的程序的结构。粗体字为路线

应用程序(选项卡导航器):{(堆栈)和过滤器(屏幕)}

主要(堆栈导航器):{ Home(屏幕)和MediaDetails(屏幕)}

我在屏幕上有一个与Filter关联的按钮,它具有onPress()函数。我传递了一些参数(但为了解决这个问题,我们只考虑参数) 。

this.props.navigation.navigate('Home', {
    to: this.state.to,
}
Run Code Online (Sandbox Code Playgroud)

现在在与Home关联的屏幕中,我正在读取状态内的参数,如下所示:

state = {
    to: this.props.route.params.to
}
Run Code Online (Sandbox Code Playgroud)

在App.js内部,我将to的初始值设置为“2020”,如下所示:

<Stack.Screen 
    name="Home" 
    component={HomeScreen}                 
    initialParams={{
       to: '2020'
    }}
/>
Run Code Online (Sandbox Code Playgroud)

初始值确实设置为2020。我按下按钮。假设我设置1900 就在this.props.navigation.navigate执行之前,我console.log(this.state.to)该值,它确实更新为1900。但是,当屏幕更改为Home时,该值将恢复为2020(通过 console.log 观察到)

有人能指出这种怪异行为的原因吗?我已经尝试调试这个好几个小时了,但没有成功。React Navigation 5 也很新,所以在网上找不到类似的东西。任何帮助将不胜感激。感谢您一路以来的阅读。

编辑:问题已解决,完整代码已删除!

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

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

任何导航器均未处理带有有效负载的 POP 操作

我不知道是什么导致了我的 React Native 应用程序中的这个错误。我正在使用 React Navigation 库的版本 5。

在此输入图像描述

有时会随机使应用程序崩溃。谷歌搜索并没有帮助我理解这是什么。这是非常有选择性的,但这是一件好事(或坏事)。

那么这意味着什么以及可能导致它的原因是什么?

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

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

如何使用反应导航删除双标题?

我的 React Native 0.61.5 使用react-navigation 5.1. 这是根导航代码:

const BTab = createBottomTabNavigator();
const Stack = createStackNavigator();
export default function App() {

  //const Appscreen = () => (<AppScreen data={data}/>);

  return (
    <NavigationContainer>
      <Stack.Navigator InitialRouteName="Splash">
        <Stack.Screen name="Splash" component={SplashScreen}}/>
        <Stack.Screen name="App" component={AppScreen} } />
      </Stack.Navigator>

    </NavigationContainer>
  );
}
Run Code Online (Sandbox Code Playgroud)

该组件AppScreen返回一个如下所示的堆栈:

return (
    <NavigationContainer independent={true}>
      <BTab.Navigator>
          <BTab.Screen name="Event" component={Eventstack} />
          <BTab.Screen name="Group" component={Groupstack} />
          <BTab.Screen name="Contact" component={Contactstack} />
      </BTab.Navigator>
    </NavigationContainer>
  );
Run Code Online (Sandbox Code Playgroud)

我注意到屏幕上有双标题:

在此输入图像描述

如何删除App标题并只保留Group

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

3
推荐指数
1
解决办法
2090
查看次数

ReactNative 无法从 &gt; 不同组件的函数体内部更新组件

我的HomeHeader组件是这样的:

import React from "react";
import { View, StyleSheet, Text, Image } from "react-native";
import Icon from "react-native-vector-icons/FontAwesome5";

export default function HomeHeader({ navigation }) {
  return (
    <View style={styles.home_header}>
      <Icon
        style={styles.menu}
        name="bars"
        size={30}
        color="white"
        onPress={navigation.toggleDrawer()}
      />

      <Image
        style={styles.header_logo}
        source={require("../assets/logo.png")}
      />
      <Text>Hello</Text>
    </View>
  );
}
Run Code Online (Sandbox Code Playgroud)

并在我的屏幕中使用它,如下所示:

return (
  <View>
    <HomeHeader navigation={navigation} />
  </View>
)
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

警告:无法从不同组件的函数体内部更新组件。

我想要做的是,我已将 HOME 屏幕的标题部分分离到一个名为 HomeHeader 的单独组件中。在这个组件中,我附加了事件处理程序来切换 DrawerNavigation(左侧抽屉菜单)的打开/关闭

如果我在主屏幕中创建一个 Button 并添加事件处理程序来切换抽屉,它工作正常。但是只有当我从我的 HomeHeader 组件内部尝试这个问题时才会发生。

顺便说一句,我正在使用 ReactNavigation v5,我什至尝试过这种方法:https ://reactnavigation.org/docs/connecting-navigation-prop/

到目前为止没有运气。

react-native react-navigation react-navigation-drawer react-navigation-stack

3
推荐指数
1
解决办法
6598
查看次数

如何仅在特定屏幕(例如主屏幕)上启用抽屉导航[反应本机] [反应导航]

此问题的用例是让抽屉菜单(如“设置”)仅在“主屏幕”中可用。在“主屏幕”上可能有许多按钮链接到堆栈导航的其他屏幕,其中抽屉不可用。

主要问题是如何仅在 Stack Navigator 的特定屏幕上启用抽屉导航?在下面的示例中,抽屉在堆栈的所有页面上都可用。我尝试过gestureEnabled但没有成功:

  const StackHome = () => (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={Home} />
      <Stack.Screen name="Example1" component={Example1} />
      <Stack.Screen name="Example2" component={Example2} />
    </Stack.Navigator>
  );
  <Drawer.Navigator initialRouteName="Home">
      <Drawer.Screen name="Home" component={StackHome} />
      <Drawer.Screen name="Settings" component={Settings} />
  </Drawer.Navigator>
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我尝试将其作为屏幕Drawer之一Stack,那么我总是有相同的标题栏(例如“标题”)

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

3
推荐指数
1
解决办法
3962
查看次数

如何在react-navigation v5中使用嵌套导航时编写类型定义

我已经像本文档所述编写了类型定义,但是当我使用嵌套导航时出现了问题。

这里是示例代码:

在我的App.tsx

export type MainStackParamList = {
  Setting: undefined
}
export type TabParamList = {
  Home: undefined
  Personal: undefined
}
const MainStack = createNativeStackNavigator<MainStackParamList>()
const Tab = createBottomTabNavigator<TabParamList>()
const RootStack = createNativeStackNavigator()

const MainStackScreen = () => (
  <MainStack.Navigator screenOptions={{ headerShown: false }}>
    <MainStack.Screen name="Setting" component={Setting} />
  </MainStack.Navigator>
)

const TabScreen = () => (
  <Tab.Navigator screenOptions={{ headerShown: false }}>
    <Tab.Screen name="Home" component={Setting} />
    <Tab.Screen name="Personal" component={Setting} />
  </Tab.Navigator>
)

const RootStackScreen = () => ( …
Run Code Online (Sandbox Code Playgroud)

react-native react-navigation react-navigation-stack

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

React Navigation 5.x 堆栈导航显示空白屏幕

//app.js "react": "16.9.0","re​​act-native": "0.61.5",官方按照官方文档但是显示黑屏 React Native

import React from 'react';
import { SafeAreaView, StatusBar, View, Text } from 'react-native';
import { Provider } from 'react-redux';
import configureStore from './App/redux/store/store'
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import AppSplashScreen from './App/screens/splashScreen/SplashScreen';
const Stack = createStackNavigator();


function MyStack() {
 return (
        <Stack.Navigator>
          <Stack.Screen name="Home" component={AppSplashScreen} />
        </Stack.Navigator>
 );
}

export default class App extends React.Component {
   constructor(props) {
     super(props)
     this.state = {}
   }

   render() {
        return ( …
Run Code Online (Sandbox Code Playgroud)

javascript android react-native react-navigation-stack

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

如何隐藏屏幕标题但显示后退按钮?

我想隐藏屏幕标题,但仍然在堆栈导航器中显示后退按钮?我在 Stack.Navigator 中设置了 screenOptions={{ headerShown: false }} ,它隐藏了屏幕标题和后退按钮。我想隐藏屏幕标题。

有人可以帮忙吗?下面是我的堆栈导航器:

function SearchStack() {
   return (
     <Stack.Navigator screenOptions={{ headerShown: false }}>
        <Stack.Screen name="SearchScreen" component={SearchScreen} />
        <Stack.Screen name="SearchListScreen" component={SearchListScreen} />

     </Stack.Navigator>
   );
}
Run Code Online (Sandbox Code Playgroud)

在选项卡导航器中,堆栈设置为:

   <Tab.Navigator screenOptions={({ route }) => ({
      tabBarIcon: ({ focused, color, size }) => {...})}> 
    <Tab.Screen name="Search" component={SearchStack} />
   </Tab.Navigator>  
Run Code Online (Sandbox Code Playgroud)

这就是我目前看到的:

在此输入图像描述

但这就是我希望我的选项卡导航栏仍然位于搜索堆栈底部的情况:

在此输入图像描述

这是我在 Stack.Navigator 中使用 options={{headerMode:"none"}} 得到的结果:

在此输入图像描述

将 Stack.Navigator 更新添加到 <Stack.Navigator screenOptions={{ headerTitle:"", headerTransparent:true }}> 时,会发生以下情况。如何将后退按钮添加或移动到顶部,就像第二张图片一样,这是在不将堆栈添加到 Tab.Screen 时实现的,因此进行更改:

<Tab.Screen name="Search" component={SearchStack} />

<Tab.Screen name="Search" component={SearchScreen} />

但这样做会导致该选项卡不会出现在搜索列表屏幕中。

在此输入图像描述

react-native react-navigation react-navigation-stack

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