subproperty single react property objects array reactjs react-native

reactjs - single - react-nativo this.setState no funciona



setstate array react (3)

En lugar de setState, use el estado como un miembro de instancia de la clase es6. La función setState se puede llamar más tarde para asegurar las repeticiones necesarias.

constructor() { super() this.state = { isNavBarHidden: false }; }

Sé que ya hay una pregunta similar pero no hay código compartido allí.

Bajo navbarChanged() > si la condición, estoy haciendo un this.setState . Esto es de tipo HomeTab pero setState no parece estar funcionando.

¿Alguna pista / puntero?

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 }); } }

Y aquí está mi código de render ():

render() { return ( <NavigatorIOS style={styles.container} navigationBarHidden={this.state.isNavBarHidden} ref="navigator" initialRoute={{ title: ''Foo'', component: HomeScreen, passProps: { parent: this } }} /> ) }


No llames explícitamente a render . React hará automáticamente una nueva representación cuando cambie el estado o las propiedades, por lo que no hay necesidad de esto. Además, ¿dónde está su método de render real?

En cuanto a su problema, setState es asíncrono y, por lo tanto, tratar de trabajar con el estado directamente después de una llamada setState no funcionará, ya que la actualización no necesariamente se ejecutará. En su lugar, puede utilizar el segundo argumento para setState que es una devolución de llamada:

this.setState({ myVal: ''newVal''}, function() { // do something with new state });

Esto se activará después de que se haya establecido el estado y después de que el componente se haya vuelto a representar.


También puede actualizar el estado en los EventHandlers y escuchar componentWillReceiveProps para el código que necesita ejecutar después de que cambie el estado.

componentWillReceiveProps(nextProps,nextState){ if(this.state.myVar === nextState.myVar){ return; } // TODO perform changes on state change }

Creo que es más óptima que la solución dada por Colin Ramsay arriba, ya que toda la lógica anterior se ejecutaría antes de render se llame al render .