开发者问题收集

反应导航 this.props.navigation 未定义

2018-05-31
2949

我有一个像这样的自定义标题

import React from 'react';
import { View, TouchableOpacity, Text, StyleSheet, Image } from 'react-native';
import { Header, Left, Right, } from 'native-base';
import { Icon } from 'react-native-elements';

export default class MainHeader extends React.Component {

pressSearch() {
    this.props.navigation.navigate('Login');
}
render () {
    return(
        <Header style={{paddingTop:25}}>
            <Left style={{marginBottom:10}}>
                <TouchableOpacity>
                    <View style={{flexDirection:'row'}}>
                        <Image
                            style={styles.stretch}
                            source={require('../images/logoforplay.png')}
                        />
                        <Text style={styles.headerText} > Eventlinn </Text>
                    </View>
                </TouchableOpacity>
            </Left>
            <Right>
                <TouchableOpacity
                    style={styles.headerButton}
                    onPress={this.pressSearch.bind(this)}
                >
                    <Icon
                        name={'search'}
                    />
                </TouchableOpacity>
                <TouchableOpacity
                    style={styles.headerButton}
                >
                    <Icon
                        name={'add-location'}
                    />
                </TouchableOpacity>
                <TouchableOpacity
                    style={styles.headerButton}
                >
                    <Icon
                        name={'notifications'}
                    />
                </TouchableOpacity>
            </Right>
        </Header>


      )
    }
}
const styles = StyleSheet.create ({
    mainContainer: {
        flex:1,
        backgroundColor:'white'
    },
    cardContainer: {
        flex:1
    },
    stretch: {
        height:35,
        width:35,
    },
    headerText: {
        fontSize:24,
        marginTop:3,
    },
    headerButton: {
        marginBottom:10,
        marginLeft:15
    }
})

我的问题 navigation.navigate 不起作用。我的路由器工作正常,因为我可以使用另一个屏幕导航到“登录”。我阅读了一些关于纯组件的内容,但仍然不明白如何解决这个问题。你有什么建议?顺便说一下,我是 React Native 的新手。

2个回答

如果您的标头不是应用程序头部路由器内的路由,则需要使用 react-router 中的 withRouter

import {withNavigation} from 'react-navigation'
export default withNavigation(MainHeader)

现在您应该能够访问 this.props.navigation,而无需直接从父组件将其作为 prop 传递下去。

Gavin Thomas
2018-05-31

在顶部使用 import { withNavigation } from 'react-navigation'; ,然后在末尾使用 export default withNavigation(FilmItem);

查看文档: https://reactnavigation.org/docs/en/connecting-navigation-prop.html

William Rossier
2019-06-30