1.ライフサイクルとは何かコンポーネントのライフサイクルは、人が生まれ、年を取り、病気になり、死ぬのと同じように、また自然界にも変化があるのと同じように、React の動作プロセスです。Web ページ内のすべてのコンポーネントは、生物と同じように作成、更新、削除されます。 Reactコンポーネントのライフサイクルは3つのプロセスに分けられます
2. 読み込みプロセス次の関数を順番に呼び出します: 1.コンストラクタこれは ES6 のコンストラクターであり、コンポーネント クラスのインスタンスを作成します。このプロセスでは、状態の初期化とメンバー関数の this 環境のバインドという 2 つの手順が必要です。 2. レンダリングレンダリングは、React コンポーネントの中で最も重要な機能です。これは、React で唯一無視できない関数です。レンダリング関数では、親要素は 1 つしか存在できません。 render 関数は純粋な関数です。実際にレンダリング アクションを実行するわけではありません。JSX で記述された構造にすぎません。最終的には、React がレンダリング プロセスを実行します。render 関数では操作は行われません。ページの記述は、this.state と this.props の戻り結果に完全に依存します。render で this.setState を呼び出すことはできません。
3. コンポーネントWillMountとコンポーネントDidMountこれら 2 つの関数は、それぞれレンダリングの前と後に実行されます。このプロセスは通常、ブラウザ側でのみ呼び出すことができるため、ここでは非同期データを取得し、componentDidMount が呼び出されると、コンポーネントが DOM ツリーに読み込まれます。 3. 更新プロセス簡単に言えば、 1. コンポーネントはプロパティを受け取ります(次のプロパティ)props が変更されたときだけ呼び出されるわけではありません。実際、親コンポーネントの render 関数が呼び出される限り、render でレンダリングされる子コンポーネントは更新されます。親コンポーネントから子コンポーネントに渡される props が変更されたかどうかに関係なく、子コンポーネントの componentWillReceiveProps プロセスがトリガーされます。ただし、この関数は新しい props の値に基づいて内部状態を更新するかどうかを計算するのに適しているため、this.setState メソッドのトリガー プロセスはこの関数を呼び出しません。 2. コンポーネントを更新する必要があります(nextProps、nextState)この関数の重要性はレンダリングに次ぐものです。レンダリング関数はレンダリングするものを決定し、shouldComponentUpdate はレンダリングする必要がないものを決定します。どちらも関数を返す必要があります。このプロセスにより、パフォーマンスが向上し、不要な再レンダリング プロセスが無視されます。 3. コンポーネントWillUpdateとコンポーネントDidUpdate読み込みプロセスとは異なり、ここでのcomponentDidUpdateはブラウザ側とサーバー側の両方で実行できます。 4. レンダリングをトリガーするReact では、レンダリングをトリガーするパスが 4 つあります。 以下は、shouldComponentUpdate がデフォルトで true を返すことを前提としています。 (1)初期レンダリング (2) this.setState を呼び出します (すべての setState 呼び出しがレンダリングをトリガーするわけではありません。React は操作をマージして一度にすべてをレンダリングする場合があります)。 (3)親コンポーネントが更新されます(通常はpropsが変更されますが、propsが変更されていない場合や親コンポーネントと子コンポーネント間でデータの交換がない場合でも、レンダリングがトリガーされます)。 (4)this.forceUpdateを呼び出します。 注: shouldComponentUpdate で false を返すと、更新パスを早期に終了できます。 4. アンインストールのプロセス実際に使われることはほとんどありません。ここにはcomponentWillUnmountが1つだけあります。一般的には、componentDidMountに登録されたイベントをここで削除する必要があります。 5. ライフサイクルプロセス1. レンダリングを初期化して初めて表示する: ReactDOM.render()
2. 毎回状態を更新する: this.setState()
3. コンポーネントを削除する: ReactDOM.unmountComponentAtNode(containerDom)
6. 例<div id='コンテナ'></div> <script type="text/babel"> クラスLifeCycleはReact.Componentを拡張します。 コンストラクタ(props) { スーパー(小道具); alert("初期レンダリング"); アラート("コンストラクタ"); this.state = {str: "hello"}; } コンポーネントマウント() { アラート("コンポーネントがマウントされます"); } コンポーネントマウント() { アラート("コンポーネントがマウントされました"); } コンポーネントはプロパティを受け取ります(次のプロパティ) { アラート("コンポーネントがプロパティを受け取る"); } コンポーネント更新() { アラート("コンポーネントを更新する必要があります"); return true; // trueを返すことを忘れないでください } コンポーネントWillUpdate() { アラート("コンポーネントが更新されます"); } コンポーネントを更新しました() { アラート("コンポーネントが更新されました"); } コンポーネントのマウントを解除します(){ アラート("コンポーネントがマウント解除されます"); } 状態を設定する() { s = "hello"とします。 (this.state.str === s)の場合{ s = "こんにちは"; } this.setState({ str: s }); } 強制更新() { this.forceUpdate(); } 与える() { アラート("レンダリング"); 戻る( <div> <span>{"プロパティ:"><h2>{parseInt(this.props.num)}</h2></span> <br /> <span>{"州:"><h2>{this.state.str}</h2></span> </div> ); } } クラスコンテナはReact.Componentを拡張します。 コンストラクタ(props) { スーパー(小道具); この状態 = { 数値: Math.random() * 100 }; } プロパティの変更(){ this.setState({ 数値: Math.random() * 100 }); } ライフサイクルステートを設定する() { this.refs.rLifeCycle.setTheState(); } 強制ライフサイクル更新() { this.refs.rLifeCycle.forceItUpdate(); } アンマウントライフサイクル() { // ここで親コンポーネントをアンマウントすると、子コンポーネントもアンマウントされます ReactDOM.unmountComponentAtNode(document.getElementById("container")); } 親強制更新() { this.forceUpdate(); } 与える() { 戻る ( <div> <a href="javascript:;" onClick={this.propsChange.bind(this)}>propsChange</a> <a href="javascript:;" onClick={this.setLifeCycleState.bind(this)}>状態の設定</a> <a href="javascript:;" onClick={this.forceLifeCycleUpdate.bind(this)}>強制更新</a> <a href="javascript:;" onClick={this.unmountLifeCycle.bind(this)}>アンマウント</a> <a href="javascript:;" onClick={this.parentForceUpdate.bind(this)}>parentForceUpdateWithoutChange</a> <ライフサイクル ref="rLifeCycle" num={this.state.num}></ライフサイクル> </div> ); } } ReactDOM.render() は、 <コンテナ></コンテナ>, document.getElementById('コンテナ') ); </スクリプト> 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: DockerがElasticsearch7.xを起動してエラーを報告する問題を解決する
>>: Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明
以下のように表示されます。 CSSコードコンテンツをクリップボードにコピー分割{境界線: 2px 固...
【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...
1. はじめにバージョン 5.0 以降でサポートされています。特定の機能を実行するための SQL ス...
目次序文vue-i18nをインストールするロケールの設定getLangs.js の実装i18nインス...
プロキシを有効にする2つの方法React には、直接使用できるカプセル化された Ajax リクエスト...
目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...
<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...
進捗バーを実装するためのJavaScriptの具体的なコードは参考までに。具体的な内容は次のとおりで...
Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....
目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...
初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...
IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...
1. mysql5.6をインストールする docker 実行 mysql:5.6すべてのアイテムのダ...
ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...
夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...