Я пытаюсь скрыть / показать кнопку в заголовке панели инструментов React Native. Я хотел бы, чтобы кнопки отображались после входа пользователя в систему. Я получаю сообщение об ошибке: undefined не является объектом в this.state.status. Как я могу получить состояние на панели инструментов?
export default class TestSC extends React.Component {
constructor(){
super();
this.state = {
status:false
}
}
static navigationOptions = ({navigation})=> {
return {
title: 'Tin Tin Foil',
headerRight: (
<View style = {styles.twoButtonView}>
{(this.state.status == true) ?
<TouchableOpacity onPress = {this._refreshButtonPress}>
<Image source = {require('../img/ic_search_white.png')} style = {styles.refrgeshButton} />
</TouchableOpacity>
: null}
<Button
onPress = {() => navigation.navigate('Login')}
title = "Login" color = "#fff" />
</View>
),
}};
toggleStatus(){
this.setState({
status:!this.state.status
});
console.info('toggleStatus: '+ this.state.status);
}
render() {
return (
<View style = {{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Test</Text>
<TouchableHighlight onPress = {()=>this.toggleStatus()}>
<Text> Click Me Toggle </Text>
</TouchableHighlight>
</View>
);
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для этого можно использовать navigation params.
При настройке состояния компонента вам также необходимо установить параметры навигатора.
this.props.navigation.setParams({
status: true
})
И используйте параметры навигатора в шапке.
navigation.state.params.status == true
Полный пример
export default class TestSC extends React.Component {
constructor() {
super();
this.state = {
status: false
}
}
static navigationOptions = ({navigation, screenProps}) => {
if (!navigation.state.params) {
navigation.state.params = {}
}
return {
title: 'Tin Tin Foil',
headerRight: (
<View style = {styles.twoButtonView}>
{(navigation.state.params.status == true) ?
<TouchableOpacity onPress = {this._refreshButtonPress}>
<Text>Login</Text>
</TouchableOpacity>
: null}
</View>
),
}
};
toggleStatus() {
this.setState(pre => {
pre.status = !pre.status
this.props.navigation.setParams({
status: pre.status
})
return pre
})
console.info('toggleStatus: ' + this.state.status);
}
render() {
return (
<View style = {{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Test</Text>
<TouchableHighlight onPress = {()=>this.toggleStatus()}>
<Text> Click Me Toggle </Text>
</TouchableHighlight>
</View>
);
}
}
Спасибо. Я новичок в React Native и какое-то время борюсь с этой проблемой. Я изменил строку условия на «{(navigation.state.params! = Null && navigation.state.params.status == true)?» Я думаю, что params был пустым при первой загрузке страницы.