React における同期および非同期 setState の問題のコード分析

React における同期および非同期 setState の問題のコード分析

React は Facebook の社内プロジェクトとして始まりました。 React の出現は革命的なイノベーションです。React は破壊的なフロントエンド フレームワークです。 React は公式には、ユーザー インターフェイスを作成するための宣言型で効率的かつ柔軟な JavaScript ライブラリとして紹介されています。React の主な機能は UI の構築ですが、プロジェクトが徐々に成長し、React はフロントエンドとバックエンドの両方をカバーする Web アプリ ソリューションになりました。

Angular はウォッチャー オブジェクトを使用し、Vue はオブザーバー モードを使用し、React は状態を使用します。それぞれに特徴があります。良いも悪いもなく、ニーズの違いによって選択が異なるだけです。

Reactの公式サイト: https://reactjs.org/GitHub

アドレスは https://github.com/facebook/react です。

1. Reactでは、onClick、onChangeなどのReactによって制御されるイベント処理関数、setStateは非同期です。

React をインポートします。{ コンポーネント } から 'react' をインポートします。

デフォルトクラス Input をエクスポートし、Component を拡張します {
    コンストラクタ(props) {
        スーパー(小道具);    

        this.state={
            名前: 'こんにちは'
        }    
    }

    _onChange(e) {
        this.setState({
            名前:'世界'
        })

        console.log(this.state.name); //こんにちは
    }

  与える () {
    戻る (
      <div クラス名 = 'cp'>
        <input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

2. addEventListenerなどのネイティブJSリスニングイベントでは、setStateは同期的です。

React をインポートします。{ コンポーネント } から 'react' をインポートします。

デフォルトクラス Input をエクスポートし、Component を拡張します {
    コンストラクタ(props) {
        スーパー(小道具);    

        this.state={
            名前: 'こんにちは'
        }    
    }

    _onChange(e) {
        // 何かをする
    }


    コンポーネントマウント() {
        入力を document.querySelector('.cp-input') にします。
        input.addEventListener('クリック', ()=>{
            this.setState({
                名前:'世界'
            })

            console.log(this.state.name); //ワールド
        })
    }

  与える () {
    戻る (
      <div クラス名 = 'cp'>
        <input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

3. setTimeoutではsetStatetは同期的である

React をインポートします。{ コンポーネント } から 'react' をインポートします。

デフォルトクラス Input をエクスポートし、Component を拡張します {
    コンストラクタ(props) {
        スーパー(小道具);    

        this.state={
            名前: 'こんにちは'
        }    
    }

    _onChange(e) {
        // 何かをする
    }


    コンポーネントマウント() {
        タイムアウトを設定します(()=>{
            this.setState({
                名前:'世界'
            })
            console.log(this.state.name); //ワールド
        }, 1000)
    }

  与える () {
    戻る (
      <div クラス名 = 'cp'>
        <input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>                
      </div>
    );
  }
}

上記はReactのsetStateの同期と非同期のコードを詳細に解析した内容です。ReactのsetStateの同期と非同期の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • React における setState の同期または非同期の問題の理解
  • ReactでのsetStateの使用と同期と非同期の使用
  • React での setState 同期および非同期シナリオの使用

<<:  CentOS7におけるKVM仮想化の基本管理の詳しい説明

>>:  MySQL ステートメントの配置と概要の紹介

推薦する

JavaScript での && および || 演算子の使用例

目次序文&& 演算子|| 演算子|| 演算子の簡単なデモ章の目的ケース演習(json...

MySQL可視化ツールNavicatへの接続方法

Navicatをインストールした後次のエラーが発生する場合があります: Client does no...

Linux コンパイル最適化で習得しなければならないいくつかの姿勢のまとめ

01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...

Tomcat+Mysql の高同時実行構成の最適化の説明

1.Tomcatの最適化構成(1)Tomcatのcatalina.batを変更するJavaをサーバー...

CSSの一般的なプロパティ

CSS の背景: background:#00ffee; //背景色を設定するbackground-...

CocosCreator ユニバーサルフレームワークデザインネットワーク

目次序文Websocketの使用Websocketオブジェクトの構築Websocket ステータスW...

JavaScript 関数をよりエレガントにする方法

目次分割代入を使用したオブジェクトパラメータコールバック関数の命名条件文を説明的にするスイッチ文をM...

MySQL における in と exists の使い方と違いの紹介

まずコードを書いて (int i=0;i<1000;i++){ (int j=0;j<5...

HTMLページでよく使われるいくつかの小さなメソッド

<Head>タグに追加する<meta http-equiv="pragm...

VUEプロジェクトでXSS攻撃に遭遇した実体験

目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...

Linux/Docker で System.Drawing.Common を使用する

序文プロジェクトを .net core に移行した後、 System.Drawing.Commonコ...

VUE のコンパイル スコープとスロット スコープのスロットの問題について

スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...

MySQL の最初のインストールが成功した後にパスワードを初期化する手順

ファイルをディレクトリに解凍しますこれは解凍後のディレクトリですmy.iniファイルを入力しますダブ...

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)コアビジネスの MapReduce プログラムを実行する前に、まずデー...

CentOS 8.1 で LEMP (Linux+Nginx+MySQL+PHP) 環境を構築する (チュートリアルの詳細)

目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...