首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将导航道具从父组件传递到header?

如何将导航道具从父组件传递到header?
EN

Stack Overflow用户
提问于 2018-01-11 17:33:54
回答 3查看 15.3K关注 0票数 1

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

带有StackNavigator的我的应用程序页面:

代码语言:javascript
复制
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到工具栏,这样我就可以从工具栏和HomeScreen访问登录页面。

我的工具栏页面:

代码语言:javascript
复制
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出现了,它将不会加载。

HomeScreen:

代码语言:javascript
复制
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:未定义的不是一个对象(评估'this.props.navigation.navigate')

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-11 17:37:39

这里,您正在向Toolbar传递一个正确的navigate<Toolbar navigate={navigate}/>

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

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

我个人鼓励将navigation传递给Toolbar<Toolbar navigation={ this.props.navigation } />。因此,您可以获得导航对象的更多可见性。

票数 8
EN

Stack Overflow用户

发布于 2018-08-10 15:45:59

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

票数 3
EN

Stack Overflow用户

发布于 2019-01-28 14:58:57

它是关于包装withNavigation HOC到相应的组件,而不是发送一个道具给孩子

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48203708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档