2017-04-01 12 views
0

ユーザーがModal要素の外側を押すと、モーダルを閉じようとしています。何らかの形でDismiss()が呼び出されたときも、コールバックの状態は変わりません。なぜsetStateは未定義に戻りますか?

どうしてですか?中this.setState機能がasyncで反応するので

export default class Message extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      id: "", 
      show: false 
     }; 
    } 

    componentDidMount() { 
     this.props.onRef(this); 
    } 

    Show(id) { 
     this.setState({ 
      id: id, 
      show: true 
     }); 
    } 

    Dismiss() { 
     this.setState({ 
      id: '', 
      show: false 
     }, function (state) { 
      console.log(state) // undefined 
     }); 
    } 

    render() { 
     if (this.state.show) { 
      return (
       <Modal close={() => this.Dismiss()}> 
        <h1>{this.state.id}</h1> 
       </Modal> 
      ); 
     } else { 
      return null 
     } 
    } 
} 

答えて

6

あなたのコールバックの状態引数がありますなぜわからない、ちょうどべきである

Dismiss() { 
    this.setState({ 
     id: '', 
     show: false 
    }, function() { 
     console.log(this.state) 
    }); 
} 
-2

はい、それはです。そして、新しい状態は、私が何を意味するか。ここevent queue

でのみ使用可能です。

this.setState({newAdded: "test"}); 
let youCannotGetIt = this.state.newAdded; // here is undefined, because this.setSate is async 
関連する問題