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 ページの作成を学習するときに注意すべき HTML タグに関するいくつかの問題を...

MySQL の行レベルロックの詳細な例

序文ロックは、複数のスレッドを実行するときにリソースへのアクセスを強制的に制限するために使用される同...

純粋な CSS でマークダウンの自動番号付けを実装するサンプル コード

問題の起源私がタイトルの番号付けの問題に初めて注目したのは、学部の論文を書いていた頃まで遡ります。当...

nginxの基礎を学ぶ

目次1. nginx とは何ですか? 2. nginx で何ができるのか? 2.1 フォワードプロキ...

CSS 3.0 テキストホバージャンプ特殊効果コード

これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...

PIP で docker-compose をインストールする際のタイムアウト問題の解決方法

1: インストールコマンドpip install docker-compose例外情報socket....

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

JavaScript 配列の重複排除とフラット化関数の紹介

目次1. 配列の平坦化(配列の次元削減とも呼ばれる)方法1: 削減メソッドを使用する方法2: スタッ...

Dockerを使用してプライベートGitLabを構築する2つの方法

最初の方法: docker インストール1. オープンソース版のイメージを取得する2. 対応するデー...

Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル

この記事では、Fedora 28 に i3 をインストールして簡単に設定する方法を説明します。 1....

React Fragment の紹介と詳しい使い方

目次序文フラグメントの動機React Fragment の紹介と使用<React.Fragme...

MYSQL の COLLATE とは何ですか?

序文MySQL で show create table <tablename> コマンド...

JavaScriptは入力ボックスコンポーネントを実装します

この記事では、入力ボックスコンポーネントを手動で実装するための具体的なコードを参考までに紹介します。...

CSS で div にスクロールを追加し、スクロール バーを非表示にする

CSS は div にスクロールを追加し、スクロール バーを非表示にします。具体的なコードは次のとお...

Angularコンポーネントの仲介モードの詳細な説明

目次1. 仲介業者モデル2. 例1. 見積コンポーネントに購入ボタンを追加する2. 親コンポーネント...