2017-03-09 65 views
1

我想改變我的狀態從渲染功能,但它不工作。React本機setState

render() { 
    return (
     <View> 
      // some code 

      {this._renderModal()} 
     </View> 
    ) 
} 

_renderModal() { 
     let channel = this.props.pusher.subscribe('my-channel'); 
     channel.bind('my-event', data => { 
      this.setState({ 
       requestedToEnter: false 
      }); 
      this.props.navigation.getNavigator('root').push(Router.getRoute('order', { restaurant_id })); 
     }); 

     return (
      <Modal 
       animationType={'slide'} 
       transparent={false} 
       visible={this.state.requestedToEnter} 
       onRequestClose={this._handleEnter}> 

       // some components 
      </Modal> 
     ) 
} 

當我收到我的事件我的路它激發是綁定到它的功能。 setState方法不會更改狀態(或者它不會重新呈現組件)。我認爲這是因爲我在事件功能中使用了setState方法。當我從推送器收到事件時,如何關閉Modal

回答

2

這是一個很糟糕的做法,因爲每次調用setState時,都會在render()中調用this.setState函數,組件將使用更新後的狀態值來綁定到組件/子組件。

或者,你可以創建變量

this.state = { 
    isModalOpen: true 
} 

的狀態,並且把你的推杆事件偵聽componentDidMount()和更新您的狀態變量值的回調。然後,用狀態變量控制模態分量的可見性:

<Modal 
    animationType={'slide'} 
    transparent={false} 
    visible={this.state.isModalOpen}></Modal>