ich weiß, gibt es bereits eine ähnliche Frage, aber es gibt keinen Code in dort geteilt.reagieren-native this.setState nicht funktioniert
Unter navbarChanged()
> wenn Bedingung, mache ich eine this.setState
. Dies ist vom Typ HomeTab
aber setState
scheint nicht zu funktionieren.
Irgendwelche Hinweise/Zeiger?
class HomeTab extends React.Component {
constructor() {
super()
this.setState({
isNavBarHidden: false
});
}
updatePosition(lastPosition) {
}
navbarChanged() {
console.log("received navbar changed event", AppStore.navbarVisible());
if (AppStore.navbarVisible()) {
StatusBarIOS.setHidden(false)
this.setState({ isNavBarHidden: false})
// this.state.isNavbarHidden is still true here
this.render();
}
else {
StatusBarIOS.setHidden(true);
this.setState({ isNavBarHidden: true});
this.render();
}
}
componentDidMount() {
AppStore.addNavbarChangeListener(this.navbarChanged.bind(this));
}
componentWillMount() {
StatusBarIOS.setHidden(false)
this.setState({ isNavBarHidden: false });
}
}
Und hier ist mein render() Code:
render() {
return (
<NavigatorIOS style={styles.container}
navigationBarHidden={this.state.isNavBarHidden}
ref="navigator"
initialRoute={{
title: 'Foo',
component: HomeScreen,
passProps: { parent: this }
}}
/>
)
}
Vielen Dank für Ihre Antwort. 'setState' ist asynchron, beantwortet diese Frage. Ich habe meinen Code mit meiner Rendermethode() aktualisiert. Ich werde loswerden render(); Was du vorgeschlagen hast, macht Sinn. Ich bin immer noch verwirrt, obwohl meine Navigationsleiste nicht angezeigt wird (aber die Titelleiste ist). – Abdo
WOW Dank - ich hatte auch keine Ahnung, das Lesen über und über die Dokumentation, die setState async ist - ganz im Gegenteil viele Online-tuts sagen, dass die Benutzeroberfläche nach dem Aufruf dieser machen wird - es funktioniert nicht sofort und Ihre Antwort hat mir geholfen, massiv. Vielen Dank – landed