[解決済み] componentWillReceivePropsではなく、ライフサイクルメソッドgetDerivedStateFromPropsを使用するには?
質問
以下のようになります。
componentWillReceiveProps
は、今後のリリースで完全に廃止され、新しいライフサイクルメソッドである
getDerivedStateFromProps
:
静的な getDerivedStateFromProps()
.
を直接比較することができなくなったようです。
this.props
と
nextProps
でできるように
componentWillReceiveProps
. これを回避する方法はあるのでしょうか?
また、現在はオブジェクトを返しています。この返り値は、基本的に
this.setState
?
以下は、ネットで見つけた例です。 props/stateから派生した状態 .
前
class ExampleComponent extends React.Component {
state = {
derivedData: computeDerivedState(this.props)
};
componentWillReceiveProps(nextProps) {
if (this.props.someValue !== nextProps.someValue) {
this.setState({
derivedData: computeDerivedState(nextProps)
});
}
}
}
その後
class ExampleComponent extends React.Component {
// Initialize state in constructor,
// Or with a property initializer.
state = {};
static getDerivedStateFromProps(nextProps, prevState) {
if (prevState.someMirroredValue !== nextProps.someValue) {
return {
derivedData: computeDerivedState(nextProps),
someMirroredValue: nextProps.someValue
};
}
// Return null to indicate no change to state.
return null;
}
}
解決方法は?
の削除について
componentWillReceiveProps
: の組み合わせで対応できるはずです。
getDerivedStateFromProps
と
componentDidUpdate
を参照してください。
Reactブログの記事
はマイグレーションの例です。そして、そうです。
getDerivedStateFromProps
に渡されたオブジェクトと同じように状態を更新します。
setState
.
どうしてもpropの古い値が必要な場合は、以下のような方法で常にステート内にキャッシュしておくことができます。
state = {
cachedSomeProp: null
// ... rest of initial state
};
static getDerivedStateFromProps(nextProps, prevState) {
// do things with nextProps.someProp and prevState.cachedSomeProp
return {
cachedSomeProp: nextProps.someProp,
// ... other derived state properties
};
}
状態に影響を与えないものであれば、すべて
componentDidUpdate
があり、さらに
getSnapshotBeforeUpdate
は、非常に低レベルのものです。
UPDATE: 新しい(そして古い)ライフサイクルメソッドの感触をつかむために react-lifecycle-visualizer パッケージが役に立つかもしれません。
関連
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】Vueが定義されていない
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] componentWillReceivePropsライフサイクルメソッドはいつ使用するのですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] JavaScriptの「bind」メソッドの使い方を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み] テスト
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー