[解決済み] React useEffectフックによるcomponentWillUnmountの実装
質問
どのようにすれば
useEffect
フック (あるいは他のフック) を使って
componentWillUnmount
?
従来のクラスコンポーネントでは、次のようなことをします。
class Effect extends React.PureComponent {
componentDidMount() { console.log("MOUNT", this.props); }
componentWillUnmount() { console.log("UNMOUNT", this.props); }
render() { return null; }
}
を使うと
useEffect
フックを使います。
function Effect(props) {
React.useEffect(() => {
console.log("MOUNT", props);
return () => console.log("UNMOUNT", props)
}, []);
return null;
}
(完全な例です。 https://codesandbox.io/s/2oo7zqzx1n )
で返される "cleanup"関数を使用するため、これはうまくいきません。
useEffect
で返される &qu;cleanup" 関数はマウント時のプロップをキャプチャし、アンマウント時のプロップの状態ではないため、これは動作しません。
のプロップの最新版を取得するにはどうしたらよいでしょうか?
useEffect
をクリーンアップします。
を使わずに
を実行することなく、プロップが変更されるたびに関数本体(またはクリーンアップ)を実行しますか?
似たような 質問 は、最新の小道具にアクセスできるという部分には触れていません。
は react docs の状態になります。
エフェクトを実行し、一度だけ(マウントとアンマウント時に)クリーンアップしたい場合、第二引数に空の配列([])を渡すことができます。これはReactに、あなたのエフェクトがpropsやstateからのいかなる値にも依存しないことを伝えるので、決して再実行する必要はありません。
しかしこの場合、私はpropsに依存しています...しかし、クリーンアップの部分だけです...。
どのように解決するのですか?
useRefを利用し、render useEffect return callbackメソッドなどのクロージャ内に使用するpropsを格納することができます。
function Home(props) {
const val = React.useRef();
React.useEffect(
() => {
val.current = props;
},
[props]
);
React.useEffect(() => {
return () => {
console.log(props, val.current);
};
}, []);
return <div>Home</div>;
}
しかし、より良い方法は、第二引数を
useEffect
に渡すことで、希望するプロップの変更時にクリーンアップと初期化が行われるようになります。
React.useEffect(() => {
return () => {
console.log(props.current);
};
}, [props.current]);
関連
-
[解決済み] ReactのuseEffectでローディング関数を1回だけ呼び出す方法
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
-
[解決済み] React Hook useEffectの非同期関数に関する警告:useEffect関数はクリーンアップ関数か何も返さないこと
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] react hooks useEffect() cleanup for only componentWillUnmount?
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?