我正在使用React本机导航。 (堆栈导航)。 但是我不能在navigationOptions中调用函数。无法正常工作。
import React, { Component } from 'react';
import { StyleSheet, View, Text, TouchableHighlight, AsyncStorage, Alert } from 'react-native';
import { Button } from 'react-native-elements';
import Icon from 'react-native-vector-icons/FontAwesome';
import HandleBack from '../../HandleBack';
export default class Dashboard extends Component {
constructor(props) {
super(props);
}
static navigationOptions = ({ navigation }) => {
return {
title: 'Dasboard',
headerLeft: null,
headerRight: (
<TouchableHighlight underlayColor='transparent' onPress={this.login.bind(this)} style={{marginRight: 10}}>
<Icon
name="power-off"
size={25}
color="white"
/>
</TouchableHighlight>
)
};
};
login() {
alert('Button clicked!');
}
onBack = () => {
this.props.navigation.navigate('Screen3');
};
render() {
return(
<HandleBack onBack={ this.onBack }>
<View>
<Text> This is screen 2 </Text>
<TouchableHighlight onPress={() => this.props.navigation.navigate('Screen3')}>
<Text> Go to Screen 3 </Text>
</TouchableHighlight>
</View>
</HandleBack>
)
}
}
当我使用onPress={this.login.bind(this)}
时出现错误
“ TypeError:TypeError:未定义不是对象(评估'_class.login.bind')”“
当我使用onPress={this.login}
时没有反应。
当我使用onPress={this.login()}
时遇到错误
TypeError:TypeError:_class.login不是函数。
但是
我正在使用onPress={() => alert('test')}
。
答案 0 :(得分:2)
您可以使用setParams或getParams进行反应导航来实现它。
export default class Dashboard extends Component {
static navigationOptions = ({ navigation }) => {
return {
title: 'Dasboard',
headerLeft: null,
headerRight: (
<TouchableHighlight underlayColor='transparent'
onPress={navigation.getParam('login')} //call that function in onPress using getParam which we already set in componentDidMount
style={{marginRight: 10}}>
<Icon
name="power-off"
size={25}
color="white"
/>
</TouchableHighlight>
)
};
};
login() {
alert('login click')
}
onBack = () => {
this.props.navigation.navigate('Screen3');
};
componentDidMount() {
this.props.navigation.setParams({ login: this.login }); //initialize your function
}
render() {
return(
.....
)
}
}
答案 1 :(得分:0)
navigationOptions必须是静态的,因为它是每个整个组件一个实例,并且您试图从静态字段中访问“实例方法”((this.login))...这将无法工作...
据我了解,您正在尝试创建“ CustomHeader”,所以我建议:
手动呈现此自定义Header组件。
要禁用默认标题,请执行以下操作:
const NavigatorConfig = {
navigationOptions: {
header: null,
},
};
createStackNavigator(RouteConfigs,NavigatorConfig);
创建自定义标题:
const MyCustomHeader =({导航,登录})=> { return(); };