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)

推薦する

HTML メタビューポート属性の説明

ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置し...

MySQL MGR の利点は何ですか?

MGR (MySQL グループ レプリケーション) は、バージョン 5.7 で追加された新しい機能...

HTML リスト ボックス、テキスト フィールド、ファイル フィールドのサンプル コード

ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...

Centos7 に MySQL 8.0.23 をインストールする手順 (初心者レベル)

まず、MySQL とは何かを簡単に紹介します。簡単に言えば、データベースはデータを格納するための倉庫...

HTMLページの読み込みと解析プロセスの詳細な紹介

ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...

ドメイン名、ポート、IPに基づいてnginx仮想ホストを構築する

nginxでサポートされている仮想ホストには3つの種類があります1. ドメイン名ベースの仮想ホスティ...

Vueのキーボードイベントの詳細な説明

目次共通キーエイリアスエイリアスが指定されていないキーシステム修飾キーカスタムキーエイリアス要約する...

React のグローバル状態管理の 3 つの基本メカニズムの調査

目次序文小道具コンテクスト州要約する序文最新のフロントエンド フレームワークはすべて、コンポーネント...

WeChatアプレットは固定ヘッダーとリストテーブルコンポーネントを実装します

目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...

1 つの記事で Apache Avro データを解析する

概要: この記事では、Avro データをシリアル化して生成し、FlinkSQL を使用して解析する方...

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

VueのkeepAliveコンポーネントの機能と使い方の詳細な説明

序文面接中、多くの面接官は「keep-alive が何をするのか知っていますか?」と質問する際に V...

ネイティブ js が携帯電話のプルダウン更新を模倣

この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...

HTML のブロックレベル要素と行レベル要素、特殊文字、ネスト規則

基本的な HTML Web ページ タグのネスト ルールを紹介する場合、最初に説明する必要があるのは...

MySQL における引用符とバックティックの違いと使い方の詳細な説明

序文そこでこのブログを書きました。このブログでは大物の記事からいくつかの知識も推奨しています。侵害が...