Reactの状態の理解についての簡単な分析

Reactの状態の理解についての簡単な分析

複雑なコンポーネント (クラス コンポーネント) と単純なコンポーネント (関数コンポーネント) をどのように定義するのでしょうか?

  • 状態があるかどうか

すると、「国家とは何か?」という疑問が生じます。

たとえば、私は今日の試験に不合格になりましたが、それは私の体調が良くなく、私の体調が私の行動に影響を与えたからです。
コンポーネントの状態によってページの更新が行われます。つまり、コンポーネントの状態にはデータが保存され、データの変更によってページの更新が行われます。

ここに画像の説明を挿入

ここで理解する必要があるのは、それが誰の状態なのかということです。状態は、コンポーネント クラス自体ではなく、このクラスによって作成されたインスタンスのコンポーネント インスタンス オブジェクトの状態です。

(クラス) コンポーネントインスタンスの3つの主要な属性の1つ: 状態

コンテンツを表示

ここに画像の説明を挿入

ページをクリックして、ホット/クールスイッチで要件を実現します

ここに画像の説明を挿入
ここに画像の説明を挿入

<!DOCTYPE html>
<html lang="ja">
  <ヘッド>
    <メタ文字セット="UTF-8" />
    <meta http-equiv="X-UA-compatible" content="IE=edge" />
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" />
    <title>反応する</title>
  </head>
  <本文>
    <div id="test"></div>
    <!-- コアライブラリをインポート-->
    <script src="../js/react.development.js"></script>
    <!-- 拡張ライブラリ -->
    <script src="../js/react-dom.development.js"></script>
    <!-- jsx を js に変換 -->
    <script src="../js/babel.min.js"></script>
    <script type="text/babel">
      // 1. コンポーネントを作成する class Weather extends React.Component {
        /**
         * コンストラクターで受け取れるデータは、new が呼び出されたときに渡されるデータによって異なります。 * New Weather は私たちではなく react によって操作されます。 */
        コンストラクタ(props) {
          // まだ props を学習していませんが、使用する必要があります。公式サイトを真似て記述します // クラス構文 super(props);
          // コンストラクタでは、これはコンストラクタインスタンスオブジェクトを指します // 16.8 より前では状態は {} ですが、16.8 以降では null です
          この状態 = {
            isHot: true、
          };
        }
        与える() {
          console.log("これ:", これ);
          <h1>今日はとても暑いですね</h1>を返します。
        }
      }
      // 2. ページにコンポーネントをレンダリングします。ReactDOM.render(<Weather />, document.getElementById("test"));
    </スクリプト>
  </本文>
</html> 

ここに画像の説明を挿入

データの初期化

<!DOCTYPE html>
<html lang="ja">
  <ヘッド>
    <メタ文字セット="UTF-8" />
    <meta http-equiv="X-UA-compatible" content="IE=edge" />
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" />
    <title>反応する</title>
  </head>
  <本文>
    <div id="test"></div>
    <!-- コアライブラリをインポート-->
    <script src="../js/react.development.js"></script>
    <!-- 拡張ライブラリ -->
    <script src="../js/react-dom.development.js"></script>
    <!-- jsx を js に変換 -->
    <script src="../js/babel.min.js"></script>
    <script type="text/babel">
      // 1. コンポーネントを作成する class Weather extends React.Component {
        /**
         * コンストラクターで受け取れるデータは、new が呼び出されたときに渡されるデータによって異なります。 * New Weather は私たちではなく react によって操作されます。 */
        コンストラクタ(props) {
          // まだ props を学習していませんが、使用する必要があります。公式サイトを真似て記述します。そうしないと機能しません。// クラス構文 super(props);
          // コンストラクタでは、これはコンストラクタインスタンスオブジェクトを指します // 16.8 より前では状態は {} ですが、16.8 以降では null です
          この状態 = {
            isHot: true、
          };
        }
        // 状態は Weather インスタンス オブジェクトにあります render() {
          console.log("これ:", これ);
          戻り値 <h1>今日の天気は非常に {this.state.isHot ? "暑い" : "涼しい"}</h1> です。
        }
      }
      // 2. ページにコンポーネントをレンダリングします。ReactDOM.render(<Weather />, document.getElementById("test"));
    </スクリプト>
  </本文>
</html> 

ここに画像の説明を挿入

次に、クリック イベントを記述します。最初にエラーのデモンストレーションを行うことに注意してください。

 <script type="text/babel">
      // 1. コンポーネントを作成する class Weather extends React.Component {
        /**
         * コンストラクターで受け取れるデータは、new が呼び出されたときに渡されるデータによって異なります。 * New Weather は私たちではなく react によって操作されます。 */
        コンストラクタ(props) {
          // まだ props を学習していませんが、使用する必要があります。公式サイトを真似て記述します // クラス構文 super(props);
          // コンストラクタでは、これはコンストラクタインスタンスオブジェクトを指します // 16.8 より前では状態は {} ですが、16.8 以降では null です
          この状態 = {
            isHot: true、
          };
        }

        // 状態は Weather インスタンス オブジェクトにあります render() {
          console.log("これ:", これ);
          戻る (
            <h1 onClick={デモ()}>
              今日の天気は {this.state.isHot ? "hot" : "cool"} です
            </h1>
          );
        }
      }
      関数デモ() {
        console.log("デモが呼び出されました");
      }
      // 2. ページにコンポーネントをレンダリングします。ReactDOM.render(<Weather />, document.getElementById("test"));
    </スクリプト>

クリックイベントを呼び出すときは、 onClick={demo()}と記述します。
コンソールでは、関数がすぐに実行されていることがわかります。

ここに画像の説明を挿入

react が新しい Weather のインスタンスを介して render メソッドを呼び出す場合、戻り値を取得するには、<h1 onClick={demo()}>今日の天気は非常に {this.state.isHot ? "熱" : "凉"}</h1> を実行する必要があります。onClick代入文が実行されると、demo() 関数呼び出しの戻り値が onClick にコールバックとして渡されます。demo() の戻り値は unifend です。つまり、undifend が onClick にコールバックとして渡されます。demo の後に () を追加すると関数呼び出しになるため、これは間違ったアプローチです。 **クリックが発生すると、undifend が呼び出され、react がこの処理を処理します。undifend の場合、追加のアクションは発生しません。

よくある書き方の間違い

  与える() {
          console.log("これ:", これ);
          戻る (
            <h1 onClick='demo()'>今日の天気は {this.state.isHot ? "hot" : "cool" です}</h1>
          );
        } 

ここに画像の説明を挿入

 与える() {
          console.log("これ:", これ);
          戻る (
            <h1 onclick='demo'>今日の天気は {this.state.isHot ? "hot" : "cool" です}</h1>
          );
        } 

ここに画像の説明を挿入

正しい書き方

<!DOCTYPE html>
<html lang="ja">
  <ヘッド>
    <メタ文字セット="UTF-8" />
    <meta http-equiv="X-UA-compatible" content="IE=edge" />
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" />
    <title>反応する</title>
  </head>
  <本文>
    <div id="test"></div>
    <!-- コアライブラリをインポート-->
    <script src="../js/react.development.js"></script>
    <!-- 拡張ライブラリ -->
    <script src="../js/react-dom.development.js"></script>
    <!-- jsx を js に変換 -->
    <script src="../js/babel.min.js"></script>
    <script type="text/babel">
      // 1. コンポーネントを作成する class Weather extends React.Component {
        /**
         * コンストラクターで受け取れるデータは、new が呼び出されたときに渡されるデータによって異なります。 * New Weather は私たちではなく react によって操作されます。 */
        コンストラクタ(props) {
          // まだ props を学習していませんが、使用する必要があります。公式サイトを真似て記述します // クラス構文 super(props);
          // コンストラクタでは、これはコンストラクタインスタンスオブジェクトを指します // 16.8 より前では状態は {} ですが、16.8 以降では null です
          この状態 = {
            isHot: true、
          };
        }

        // 状態は Weather インスタンス オブジェクトにあります render() {
          console.log("これ:", これ);
          戻る (
            <h1 onClick={デモ}>
              今日の天気はとても{this.state.isHot ? "暑い" : "涼しい"}です
            </h1>
          );
        }
      }
      関数デモ() {
        console.log("デモが呼び出されました");
      }
      // 2. ページにコンポーネントをレンダリングします。ReactDOM.render(<Weather />, document.getElementById("test"));
    </スクリプト>
  </本文>
</html> 

ここに画像の説明を挿入

改訂

データは上記のページにレンダリングされており、ここでページ上のデータを変更します。データを変更する場合は、まず状態の isHot を取得する必要があります。間違った書き方を見てみましょう。

 関数デモ() {
        console.log("デモが呼び出されました");
        // エラーのデモンストレーション const { isHot } = this.state;
        console.log("isHot", isHot);
      } 

ここに画像の説明を挿入

プロンプトは xxx of undefined (読み方は「state」) で、これは未定義の状態を意味します。xxx が未定義の場合、undefined.state によってこのエラーが報告されます。ここでのxxxはこれを指します。
これを印刷してみましょう

  関数デモ() {
        // エラーのデモンストレーション console.log("this", this);
        const { isHot } = this.state;
        console.log("isHot", isHot);
      } 

ここに画像の説明を挿入

コード構造とコメントを見てみましょう

ここに画像の説明を挿入

ここに画像の説明を挿入

印刷してみると、カスタム関数をクラス外に配置すると、データは正しく表示できるものの、状態内のデータを取得・変更できないことがわかります。

  WeatherクラスはReact.Componentを拡張します。
        /**
         * コンストラクターで受け取れるデータは、new が呼び出されたときに渡されるデータによって異なります。 * New Weather は私たちではなく react によって操作されます。 */
        コンストラクタ(props) {
          // まだ props を学習していませんが、使用する必要があります。公式サイトを真似て記述します // クラス構文 super(props);
          /**
           * コンストラクタでは、これはコンストラクタインスタンスオブジェクトを指します。 * 16.8より前では、状態は{}で、16.8以降ではnullです。
           * 状態は Weather のインスタンス オブジェクト内にあります */
          この状態 = {
            isHot: true、
          };
        }
        // 天気を切り替えるデモ() {
          console.log("これ", これ);
          const { isHot } = this.state;
          console.log("isHot", isHot);
        }
        // レンダリング render() {
          console.log("これ:", これ);
          戻る (
            <h1 onClick={デモ}>
              今日の天気は {this.state.isHot ? "hot" : "cool"} です
            </h1>
          );
        }
      }

クラスは関数本体ではないので、関数を書く必要はありません。

これで、React の状態の理解についての簡単な分析の記事は終了です。React の状態の理解についてさらに詳しく知りたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React Stateの原則を深く理解する
  • reactにおけるstateの略語の詳細な説明
  • react setStateの詳細な説明
  • ReactのsetStateソースコードの詳細な研究
  • ReactのsetStateの動作メカニズムの詳細な理解
  • React コンポーネントの状態と setState() についてどれくらい知っていますか?

<<:  CentOS 7 で Apache (httpd) サービスをインストールおよびアンインストールする詳細な手順

>>:  MySQL統計テーブルのサイズを説明する例

推薦する

MySQL インデックス プッシュダウンを 5 分で理解する

目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...

jsはreduceメソッドを使用してコードをよりエレガントにします

序文実際のプロジェクトでは、最も一般的な処理は計算とループロジックである可能性があります。配列でre...

Dockerが正常に起動しない原因と解決策を詳しく解説

1. Docker 起動時の異常なパフォーマンス: 1. ステータスが繰り返し再起動している場合は、...

WIN10 での JDK インストールと環境変数の設定手順 (詳細版)

目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...

html リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明

1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...

Vue2.x - アンチシェイクとスロットリングの使用例

目次ユーティリティ: vue での使用:説明する:画像安定化:スロットル:ユーティリティ: // 手...

MySQLでconcat関数を使用する方法

以下のように表示されます。 //managefee_managefee テーブルの年と月を照会し、c...

HTML で js を使用してローカル システム時間を取得する

コードをコピーコードは次のとおりです。 <div id="名前"> ...

Vue プロジェクトでの支払い機能の実装 (WeChat 支払いと Alipay 支払い)

目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...

Linux usermod コマンドの使用

1. コマンドの紹介usermod (ユーザー変更) コマンドは、ユーザー アカウントを変更するため...

CSSをインポートする方法に関する詳細な洞察の要約

CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...

js 学習ノート: class、super、extends キーワード

目次序文1. es6の前にオブジェクトを作成する2. es6 後のクラス宣言3. クラスの継承4. ...

WindowsでのNginxの起動や停止などの基本操作コマンドの詳しい説明

Windows で Nginx を使用するには、Nginx サービスの起動、停止、Nginx のリロ...

CentOS で MySQL を完全にアンインストールする方法

この記事では、CentOSでのMySQLの完全アンインストールについて記録しています。具体的な内容は...