如何将导航道具从父组件传递到标题?

Posted

技术标签:

【中文标题】如何将导航道具从父组件传递到标题?【英文标题】:How do I pass navigation props from parent component to header? 【发布时间】:2018-06-20 14:01:59 【问题描述】:

我有 4 个页面:App.js、HomeScreen.js、Login.js、Toolbar.js

带有 StackNavigator 的我的应用页面:

import React,  Component  from 'react';
import 
  Platform,
  StyleSheet,
  Text,
  View
 from 'react-native';

import  StackNavigator, DrawerNavigator  from 'react-navigation';

import Splash from './screens/Splash';
import HomeScreen from './screens/HomeScreen';
import Login from './screens/Login';
import Lobby from './screens/Lobby';
import Wifi from './screens/Wifi';
import Toolbar from './components/ToolBar/Toolbar';
import Mobile from './screens/Mobile';


;

const Navigation = StackNavigator(
  Splash:screen: Splash,
  HomeScreen:screen: HomeScreen,
  Login:screen: Login,
  Lobby:screen: Lobby,
  Wifi:screen: Wifi,
  Mobile:screen:Mobile
, 
  mode: 'modal',
  headerMode: 'none'
);


export default Navigation;

我正在将工具栏导入到 HomeScreen,并希望将导航道具从 HomeScreen 传递到 Toolbar,以便我可以从 Toolbar 和 HomeScreen 访问登录页面。

我的工具栏页面:

import React,Component from 'react';
import Text, View, Button, StyleSheet, TouchableOpacity, 
    Dimensions,
    Image,ScrollView, Picker, FlatList from 'react-native';
import  StackNavigator, DrawerNavigator  from 'react-navigation';
import config from '../../components/config/index';




class Toolbar extends Component
    constructor()
        super()
        this.state = 

        
    
    render()
    //const navigate = this.props.navigation;
        return(
            <View style=styles.mainToolbar>
                <View style=styles.containerForThree>
                    <View style=styles.leftArrowContainer>

                        <TouchableOpacity
                            onPress=()=>navigate('Login')
                        >
                            <Text>hello</Text>

                        </TouchableOpacity>

                    </View>

截至目前,我已将 const navigate 注释掉,因为 HomeScreen 出现时不会加载。

主屏幕:

import React,Component from 'react';
import 
    AppRegistry, StyleSheet, Text, View, Image, ScrollView, Button, TouchableOpacity, Dimensions
     from 'react-native';
import  StackNavigator  from 'react-navigation';
import Toolbar from '../components/ToolBar/Toolbar';

export default class HomeScreen extends Component 
    static navigationOptions =
        title: 'Home Screen'
    ;


    onValueChange(value, idx)
        this.setState(
            language: value
        )

        AsyncStorage.setItem('language', value)   
    

    render()
        var navigate = this.props.navigation;
        return(
            <View style=styles.scrollContainer>
            <Toolbar navigate=navigate/>
                <View>
                    <Text>Welcome To the SEcond Page</Text>
                        <Button
                            onPress=
                                ()=>navigate("Login")
                            
                            title="Go to Login"
                        />
                </View>

我试图通过 HomeScreen 将导航道具传递到工具栏

当我按下按钮时,它说找不到变量“导航”。但是,当我取消注释掉工具栏上的导航时,我收到错误 TypeError: undefined is not an object(evaating 'this.props.navigation.navigate')

【问题讨论】:

【参考方案1】:

在这里,您将 navigate 传递给 Toolbar&lt;Toolbar navigate=navigate/&gt;

因此您需要在render() 中这样引用它: const navigate = this.props;

所以只是一个小错误,但这就是解决它的方法。

我个人鼓励将navigation 传递给Toolbar&lt;Toolbar navigation= this.props.navigation /&gt;。因此,您可以更清楚地看到导航对象。

【讨论】:

render(): const 导航 = this.props; --> navigation.navigate('screen')【参考方案2】:

你可以使用 React 导航的 withNavigation 属性。如果要从组件导航。 https://reactnavigation.org/docs/en/connecting-navigation-prop.html

【讨论】:

【参考方案3】:

这是关于将withNavigation HOC 包装到相应的组件。这不像向孩子发送道具

【讨论】:

以上是关于如何将导航道具从父组件传递到标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何将道具传递给 React Navigation 导航器中的组件?

如何通过 React Navigation 将导航道具传入功能组件屏幕?

将“导航”和“道具”传递给子组件

如何将道具从父组件添加到子组件的子组件

Vuejs将道具从父组件传递到子组件不起作用

如何将从父组件传递的道具推送到子组件中的数组?