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)

推薦する

Firefox で Flash を再生するためのオブジェクトとパラメータの書き方

コードをコピーコードは次のとおりです。 <object classid="clsid...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

JSは検証コードのランダム生成を実装します

この記事の例では、検証コードのランダム生成を実現するためのJSの具体的なコードを参考までに共有してい...

CentOS 6.5 の設定 ssh キーフリーログインで pssh コマンドを実行する方法の説明

1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...

Vue ページ内の公開マルチタイプ添付画像アップロード領域と適用可能な折りたたみパネル (サンプルコード)

フロントエンド プロジェクトでは、添付ファイルのアップロードは非常に一般的な機能であり、ほぼすべての...

Windows 10 に MySQL 8.0.19 を zip 形式でインストールする詳細なチュートリアル

目次1.ダウンロード後、インストールしたいディレクトリに解凍します。 2. インストールディレクトリ...

MySQL 入門 - 概念

1. それは何ですか? MySQL は最も人気のあるリレーショナル データベース管理システムです。W...

CentOS に MySQL をインストールしてリモート アクセスを設定する方法

1. MySQLリポジトリソースをダウンロードする$ wget http://repo.mysql....

Linux 圧縮ファイルコマンド zip の使用例

「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...

Mac MySQL のルートパスワードをリセットするチュートリアル

免責事項:このパスワード リセット方法は、Homebrew によってインストールされた MySQL ...

Docker マルチステージビルドを使用してイメージサイズを縮小する方法

この記事では、Docker のマルチステージ ビルド機能を使用してイメージ サイズを大幅に削減する方...

Vue3 Vue CLI マルチ環境設定

目次1. はじめに2. 切り替え1. 開発および本番環境の設定ファイルを追加する2. 複数の環境をサ...

HarborをベースにしたDocker専用倉庫の構築方法

目次1. ハーバーの紹介1. ハーバーが民間倉庫を建設3. 港湾の維持管理4. Harborユーザー...

Linux システム AutoFs 自動マウント サービスのインストールと構成

目次序文1. サービスプログラムをインストールする2. メイン設定ファイルを書く3. サブ構成ファイ...

MySql データベースのサブクエリと高度なアプリケーションの簡単な分析

MySql データベースのサブクエリ:サブクエリ: 選択クエリ ステートメント内に別の選択ステートメ...