-1

私は他の誰かによって書かれたコードを持っていますが、constructorどこで初期化しましたが、 if isstateとも呼ばれます。コードは次のとおりです。setStatepropsundefined

constructor(props) {
    super(props);
    this.state = {
        subId: props.match.params.subId
    }
   if(props!==undefined){
        this.setState({
            subId: props.match.params.subId 
        });
    }
} 

モジュールを実行すると、コンソールに警告が表示されます。これは通常、マウントされていないコンポーネントで setState() を呼び出したことを意味します。これはノーオペレーションです。

私はそれについてグーグルで調べたところ、コンストラクターで setState を呼び出すべきではないことがわかりました。しかし、ここでコンストラクターで行われたことと、反応によって期待される理想的な方法をまだ理解できていません。コンストラクターで行われたコードが正しいかどうかを理解するのに助けが必要ですか? はいの場合はなぜですか? いいえの場合はなぜですか?

4

3 に答える 3

3

すでに与えられた回答に加えて、これsetStateは非同期操作であることに注意してください。

JavaScript のコンストラクターは、その性質上、構築されているクラスのインスタンスを構築して「返す」必要がある同期関数です。コンストラクターを呼び出すsetStateと、未確定の状態になり、コンポーネントの構築が完了したという事実に依存できなくなります。

于 2017-08-17T12:41:46.750 に答える