「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Reactの「SetState」が非同期に見えるのはなぜですか?更新された状態がすぐに反映されるようにするにはどうすればよいですか?

Reactの「SetState」が非同期に見えるのはなぜですか?更新された状態がすぐに反映されるようにするにはどうすればよいですか?

2025-02-21に投稿
ブラウズ:730

Why Does React's `setState` Appear Asynchronous, and How Can I Ensure Updated State is Immediately Reflected?

reactの遅延状態の更新:非同期setState

reactコンポーネントを操作する場合、セットステート法の性質を理解することが重要です。状態の更新がすぐに発生する命令プログラミングとは対照的に、Reactのセットステートは非同期です。これは、状態を更新しても、コンポーネントの内部状態に即座に反映されないことを意味します。 Reactでボードアドコンポーネントを実装するスニペット:

class boardAdd extends React.comPonent { コンストラクター(小道具){ スーパー(小道具); this.state = { BoardAddModalshow:false }; this.openaddboardmodal = this.openaddboardmodal.bind(this); } OpenAddBoardModal(){ this.setState({boardDmodalshow:true}); console.log(this.state.boardaddmodalshow); } } openAddboardModalメソッドが呼び出されたら、BoardAddModalshowフラグをTrueに設定し、その価値をコンソールに印刷します。ただし、コンソール出力は、SetStateコールにもかかわらず値が誤ったままであることを示しています。それが呼び出された後、UIはReactが再レンダーをスケジュールするまで影響を受けません。 console.logステートメントは再レンダーが発生する前に実行され、時代遅れの状態値が印刷されます。 setStateの引数としてコールバック関数を使用できます。状態が更新され、再レンダーが発生した後にコールバックが実行されます。 this.setState({boardaddmodalshow:true}、function(){ console.log(this.state.boardaddmodalshow); }); }

この場合、Console.logステートメントは州が更新された後に実行され、BoardAddModalshowの新しい値を真実として正しく示します。

class BoardAdd extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            boardAddModalShow: false
        };
        this.openAddBoardModal = this.openAddBoardModal.bind(this);
    }

    openAddBoardModal() {
        this.setState({ boardAddModalShow: true });
        console.log(this.state.boardAddModalShow);
    }
}
SetStateのこの非同期性は、パフォーマンスを向上させる目的に役立ちます。州の更新が再レンダーをトリガーするため、同期するとブラウザの無反応につながる可能性があります。バッチセットステートコールは、不必要な再レンダーを最小限に抑え、ユーザーエクスペリエンスを向上させることでパフォーマンスを向上させます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3