React Stateの状態とライフサイクルの実装方法

React Stateの状態とライフサイクルの実装方法

1. コンポーネントの実装方法:

組件名稱首字母必須大寫

1. JS関数を通じてコン​​ポーネントを実装する

<div id="アプリ"></div>
<script type="text/babel">
  var ReactDiv = document.getElementById('app');
  関数 GetReactComp(){
    return <p>私はReactコンポーネントです</p>
  }
  const hellocomp = < GetReactComp /> //最初の文字を大文字にする const reactSpan = (
    <span>
      { hellocomp }
    </span>
  )
  ReactDOM.render(reactSpan、ReactDiv) は、
</スクリプト>

2. ES6クラスを通じてコン​​ポーネントを実装する

<div id="クラス"></div>
<script type="text/babel">
  var reactDiv1=document.getElementById('class');
  //クラスコンポーネントを定義する class MyReactComp extends React.Component{
    与える(){
      戻る (
        <h2>クラスコンポーネント</h2>
      )
    }
  }
  //クラスコンポーネントを使用する const testDiv = (
    <div>{<MyReactComp/> </div>
  )
	//ReactDOM.render(testDiv,reactDiv1) をマウントします
</スクリプト>

2. Propsコンポーネント値の転送

React には、props に対する厳格な保護メカニズムがあります。値が与えられると、コンポーネント内で不允許被改變

<div id="アプリ"></div>
<script type="text/babel">
  var reactDiv = document.getElementById('app');
  クラスReactClassCompはReact.Componentを拡張します。
    与える(){
      戻る (
      <div>
      <p>ユーザー名: <input type="text" value={ this.props.name }/></p>
      <p>性別: <input type="text" value={ this.props.gender }/></p>
      </div>
      )
    }
  }

  ReactClassComp.defaultProps={
    名前:「劉備」、
    性別: '男性'
  }
  定数 reactp = (
    <span>
      {<ReactClassComp />}  
    </span>
  )
  ReactDOM.render(reactdiv,reactdiv)
</スクリプト> 

ここに画像の説明を挿入

注意: 多くの場合、データの更新に合わせてコンポーネントのコンテンツを更新する必要があります。このとき、React が提供する State を使用する必要があります。

3. 状態

  • React はコンポーネントを狀態機と見なし、内部的に定義された状態とライフサイクルを通じてユーザーと対話し、コンポーネントのさまざまな状態を維持し、UI をレンダリングすることでユーザー インターフェイスとデータの一貫性を確保します。
  • 作成方法: ES6 クラス継承メソッドsuperを使用して、プロパティを React.Component コンストラクターに渡すことができます。

1. Reactライフサイクルマウント(マウント):

コンポーネントインスタンスが作成され、DOMに挿入されると

(1) constructor(props) --> コンポーネントがマウントされる前に、そのコンストラクターが呼び出されます。状態を初期化したりメソッドをバインドしたりする必要がない場合は、コンストラクターを作成する必要はありません。

コンストラクターは次の 2 つの場合にのみ使用されます。

  • this.stateにオブジェクトを割り当てて内部状態を初期化する
  • インスタンスをイベントハンドラにバインドする

注意: コンストラクター() 関数内で setState() メソッドを呼び出さないでください。内部状態を使用する必要がある場合は、コンストラクターで this.state を直接割り当てて状態を初期化できます。

コンストラクタ(props){
	スーパー(小道具);
		この状態 = {
			日付:新しい日付()
		}
		this.handleShow = this.handleShow.bind(this)
	
}

(2) render() --> 実装する必要がある

this.props と this.state の変更をチェックし、次のいずれかの型を返します。

  • React要素: 通常はJSXで作成されます
  • 配列またはフラグメント: 複数の
  • ポータル: ノードを異なるDOMサブツリーにレンダリングできる
  • 文字列または数値型: テキストノードとしてレンダリングされます
  • ブール値または null: 何もレンダリングしない

純函數: コンポーネントの状態を変更せずに呼び出されるたびに同じ結果を返し、ブラウザと直接対話しません。
ブラウザとやりとりする必要がある場合は、ComponentDidMount()またはその他のライフサイクルで定義します。

(3) ComponmentDidMount() -->コンポーネントがマウントされた直後に呼び出されます。

  • DOMノードの初期化に依存する
  • データを取得するためのネットワーク要求をインスタンス化する
  • componentWillUnmount() でサブスクリプションを追加および解除する

注: ComponentDidMount() 内で setState() を直接呼び出すことができます。追加のレンダリングがトリガーされますが、このレンダリングはブラウザが画面を更新する前に行われます。これにより、render() が 2 回呼び出されても、ユーザーには中間状態が表示されなくなります。

更新:

compomentDidUpdate(prevProps,prevProps,snapshot) : 更新直後に呼び出されます。このメソッドは最初のレンダリングでは実行されません。コンポーネントが更新されると、ここで DOM を操作できます。

コンポーネント更新(前のプロパティ){
	if(this.props.userID !== prevProps.userID){
		this.fetchData(this.props.userID)
	}
}

注意: combositionDidUpdate() で setState() を呼び出す場合は、条件文でラップする必要があります。そうしないと、無限ループが発生します。また、追加の再レンダリングも発生し、ユーザーには見えませんが、コンポーネントのパフォーマンスに影響します。

アンインストール:

componentWillUnmount() --> コンポーネントがアンインストールされ破棄される直前に呼び出されます。
注意: コンポーネントは再レンダリングされないため、componentWillUnmount() では setState() を呼び出さないでください。コンポーネント インスタンスがアンマウントされると、再度マウントされることはありません。

2. ライフサイクルインスタンス-->クロック:

<div id="アプリ"></div>
<script type="text/babel">
  var reactDiv = document.getElementById('app')
  //クラスコンポーネントMyStateCompを定義する 
  クラスMyStateCompはReact.Componentを拡張します。
    //コンストラクタ コンストラクタ(props) {
      スーパー(小道具); 
      // this.state を通じて内部的に状態を初期化します this.state = {
        日付:新しい日付()、
        表示:false、
        テキスト:'表示'
      }
      // インスタンスをイベント処理関数にバインドします this.handleShow = this.handleShow.bind(this)
    }
    //サブスクリプションを追加するcomponentDidMount() {
      this.timerID = setInterval(()=>this.tick(),1000)
    }
    //時間関数 tick() {
      this.setState({ //setStateはコンポーネントの状態を更新します
        日付:新しい日付()
      })
    }
    //インスタンスの表示、非表示 handleShow() {
      this.setState(state=>({
        表示: !state.show,
        テキスト: !state.show?'非表示':'表示'
      }))
    }
    //コンポーネントのアンインストール: タイマーをクリアするcomponentWillUnmont() {
      クリア間隔(this.timerID)
    }
    
    与える() {
      isShow を this.state.show とします。
      要素をletします。
      if(isShow){
        要素 = <h2 >{this.state.date.toLocaleTimeString()}</h2> 
      }それ以外{
        要素 = null
      }
      戻る (
        <div>
          <button onClick={this.handleShow}>{this.state.text}時間</button>
          {要素}
        </div>
      )
    }
  }
  定数反応スパン = (
    <span>
      {<MyStateComp/> }  
    </span>
  )
  ReactDOM.render(reactSpan、reactDiv) は、
</スクリプト> 

ここに画像の説明を挿入

React State とライフサイクルに関するこの記事はこれで終わりです。React State ライフサイクルに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • reactにおけるstateの略語の詳細な説明
  • Reactの3つの主要属性における状態の使用の詳細な説明
  • Reactの状態についての簡単な説明
  • Reactの状態の理解についての簡単な分析

<<:  mysql5.7.18のインストールと初期パスワードの変更方法

>>:  Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

推薦する

MySQL インポート csv エラーの 4 つの解決策

これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます。以下の操作はすべて...

vue3+electron12+dll 開発のためのクライアント構成の詳細な説明

目次リポジトリソースを変更する起動するvue-devtoolsを置き換える予防ボーダーレスウィンドウ...

MySQLの基本を素早く学ぶ

目次SQLを理解するSELECTを理解するエイリアス定数をクエリし、固定定数列を追加します。重複行を...

Vueはキャンバスの手書き入力を使用して中国語を認識します

効果画像: 序文:最近、屋外の大画面プロジェクトに取り組んでいました。システムの入力方法は使いにくか...

v-model 双方向バインディングデータを実装する vue カスタム コンポーネントのサンプル コード

プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、pr...

CSS の記述基準と順序を共有する [すべての人に使用を推奨]

CSSの記述順序1. 位置属性(位置、上、右、z-index、表示、フロートなど) 2. サイズ(...

Python ベースの Linux システムにおける特定のプロセスのパフォーマンス監視の考え方の詳細な説明

インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数あ...

Linuxコマンドとファイル検索の詳しい説明

1. ファイル名検索を実行するwhich ('実行可能ファイル' を検索) //PA...

HTMLコードに基づく画像断片化読み込み機能の実装

今日は断片化された画像の読み込み効果を実装します。効果は次のとおりです。 これを 3 つのステップで...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

MySQL の乗算と除算の精度の不一致の問題 (除算後の小数点以下 4 桁)

質問今日、プロジェクト関数を書いていたとき、金額の統計計算を行い、単位を変換する必要がありました。そ...

select @@session.tx_read_only が DB に大量に出現するのはなぜですか?

問題を見つける上位の SQL ステートメントを取得すると、DB が大量のselect @@sessi...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...