旧ライフサイクルと比較して
React16以降、3つのライフサイクルが非推奨になりました(ただし削除はされません)
新しいバージョンのライフサイクルに新しいフックが追加されました
更新前にスナップショットを取得する
プロパティから派生した状態を取得するgetDerivedStateFromProps はインスタンス用ではないため、静的メソッドとして定義する必要があります。戻り値を与える必要がある 戻り値は状態Objまたはnullになります //propsから派生した状態を取得する static getDerivedStateFromProps(props,state){ リターンプロップ } 状態の値が常にpropsに依存する場合は、getDerivedStateFromPropsを使用できます。 <div id="test"></div> <!-- react core ライブラリをインポート --> <script src="../js/17.0.1/react.development.js"></script> <!-- react-dom を導入して、DOM を操作するための react をサポートする --> <script src="../js/17.0.1/react-dom.development.js"></script> <!-- jsx を js に変換するには babel を導入します --> <script src="../js/17.0.1/babel.min.js"></script> <スクリプトタイプ='text/babel'> // コンポーネントクラスを作成する Count extends React.Component{ // コンストラクタ コンストラクタ(props){ console.log('Count --- コンストラクター') スーパー(小道具) // 状態を初期化します this.state = {count:0} } //フックcomponentDidMount(){ console.log('Count --- componentDidMount') } // コンポーネントのアンインストールボタンのコールバック death=()=>{ ReactDOM.unmountComponentAtNode(document.getElementById('test')) } // +1 を実装する 追加 =()=>{ // 元の状態を取得する const {count} = this.state // ステータスを更新 this.setState({count:count+1}) } // 強制更新ボタンのコールバック force=()=>{ this.forceUpdate() } 静的 getDerivedStateFromProps(props,state){ console.log('getDerivedStateFromProps', プロパティ, 状態) リターンプロップ } // コンポーネント更新バルブを制御する shouldComponentUpdate(){ console.log('Count --- shouldComponentUpdate') // 戻り値が false の場合、バルブはデフォルトで閉じられます。 真を返す } //コンポーネント更新完了フックcomponentDidUpdate(){ console.log('Count --- コンポーネントの更新回数') } // コンポーネントはアンインストールされます hook componentWillUnmount(){ console.log('Count --- componentWillUnmount'); } 与える(){ console.log('カウント --- レンダリング') const {count} = this.state 戻る( <div> <h2>現在の合計: {count}</h2> <button onClick={this.add}>クリックして +1</button> <button onClick={this.death}>クリックしてコンポーネントをアンインストールします</button> <button onClick={this.force}>強制的に更新するにはここをクリックします(データは変更されません)</button> </div> ) } } // コンポーネントのレンダリング ReactDOM.render(<Count count={166}/>,document.getElementById('test')) </スクリプト> 実行結果 更新前にスナップショットを取得する戻り値は null またはスナップショットになります。null の場合、効果はありません。スナップショットの場合、戻り値は componentDidUpdate の 3 番目のパラメータに渡すことができます。 <div id="test"></div> <!-- react core ライブラリをインポート --> <script src="../js/17.0.1/react.development.js"></script> <!-- react-dom を導入して、DOM を操作するための react をサポートする --> <script src="../js/17.0.1/react-dom.development.js"></script> <!-- jsx を js に変換するには babel を導入します --> <script src="../js/17.0.1/babel.min.js"></script> <スクリプトタイプ='text/babel'> // コンポーネントクラスを作成する Count extends React.Component{ // コンストラクタ コンストラクタ(props){ console.log('Count --- コンストラクター') スーパー(小道具) // 状態を初期化します this.state = {count:0} } //フックcomponentDidMount(){ console.log('Count --- componentDidMount') } // コンポーネントのアンインストールボタンのコールバック death=()=>{ ReactDOM.unmountComponentAtNode(document.getElementById('test')) } // +1 を実装する 追加 =()=>{ // 元の状態を取得する const {count} = this.state // ステータスを更新 this.setState({count:count+1}) } // 強制更新ボタンのコールバック force=()=>{ this.forceUpdate() } 静的 getDerivedStateFromProps(props,state){ console.log('getDerivedStateFromProps', プロパティ, 状態) nullを返す } 更新前にスナップショットを取得する(){ console.log('getSnapshotBeforeUpdate'); 「eee」を返す } // コンポーネント更新バルブを制御する shouldComponentUpdate(){ console.log('Count --- shouldComponentUpdate') // 戻り値が false の場合、バルブはデフォルトで閉じられます。 真を返す } //コンポーネント更新完了フックcomponentDidUpdate(preProps,preState,snapshotValue){ console.log('Count---1componentDidUpdate',preProps,preState,snapshotValue); } // コンポーネントはアンインストールされます hook componentWillUnmount(){ console.log('Count --- componentWillUnmount'); } 与える(){ console.log('カウント --- レンダリング') const {count} = this.state 戻る( <div> <h2>現在の合計: {count}</h2> <button onClick={this.add}>クリックして +1</button> <button onClick={this.death}>クリックしてコンポーネントをアンインストールします</button> <button onClick={this.force}>強制的に更新するにはここをクリックします(データは変更されません)</button> </div> ) } } // コンポーネントのレンダリング ReactDOM.render(<Count count={166}/>,document.getElementById('test')) </スクリプト> 要約するライフサイクルの 3 つのフェーズ (新規)1. 初期化フェーズ: ReactDOM.render() によってトリガーされる - 初期レンダリング コンストラクター()getDerivedStateFromPropsrender()componentDidMount() 2. 更新フェーズ: コンポーネント内の this.setSate() または親コンポーネントの再レンダリングによってトリガーされます。 getDerivedStateFromPropsshouldComponentUpdate()render()getSnapshotBeforUpdatecomponentDidUpdate() 3. コンポーネントのアンマウント: ReactDOM.unmountComponentAtNode() によってトリガーされます コンポーネントのマウントを解除します() 重要なフックrender: レンダリングを初期化するか、レンダリング呼び出しを更新する。componentDidMount: 監視を開始し、Ajax リクエストを送信する。componentWillUnmount: タイマーのクリーンアップなどの仕上げ作業を行う。 捨てられるフック
現在使用すると警告が表示されます。次のメジャー バージョンでは UNSAFE_ プレフィックスの使用が必須になります。将来的には完全に廃止される可能性があり、推奨されません。 これで、新しいバージョンの React ライフサイクル フック機能に関するこの記事は終了です。React ライフサイクル フック機能に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Tomcat で静的リソースを処理するチュートリアル
>>: Keras を使って SQL インジェクション攻撃を判断する (例の説明)
最近の問題としては、次のような現象があります。システムには、docker run コマンドを継続的に...
1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...
場合によっては、SQL へのデータのエクスポートとインポートを容易にするために、特定のツールを使用し...
Apache Log4j2 が核レベルの脆弱性を報告し、スタックリーダーの友人たちは大騒ぎになりまし...
1. 外部キーの設定方法1. MySQL では、2 つのテーブルを関連付けるために、外部キー (FO...
目次1. テンプレート2. ジェネリック3. ジェネリック再帰4. デフォルトのジェネリックパラメー...
結論:マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) ...
nginx ログは filebeat によって収集され、logstash に渡され、logstash...
次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...
1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...
取引トランザクションはビジネス ロジックの基本単位です。各トランザクションは一連の SQL ステート...
画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...
Yahoo チームが書いた、ウェブサイトのパフォーマンス最適化に関する記事を読みました。この記事は...
目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...