[解決済み】useEffectフックの中で状態を設定することは可能か?
2022-04-11 23:34:02
質問
ある状態があり、それが他の状態に依存しているとします(例えば、Aが変化したとき、Bを変化させたい)。
useEffectフックの中に、Aを観測してBを設定するフックを作るのは適切でしょうか?
ボタンをクリックすると、次のレンダリングの前に、最初の効果が発火してbが変化し、2番目の効果が発火するように、効果がカスケードするのでしょうか。このようなコードの構造化には、パフォーマンス上のデメリットがありますか?
let MyComponent = props => {
let [a, setA] = useState(1)
let [b, setB] = useState(2)
useEffect(
() => {
if (/*some stuff is true*/) {
setB(3)
}
},
[a],
)
useEffect(
() => {
// do some stuff
},
[b],
)
return (
<button
onClick={() => {
setA(5)
}}
>
click me
</button>
)
}
解決方法は?
あるエフェクトの内部でsetStateしても、エフェクトは常にレンダリングフェーズ終了後に実行され、別のエフェクトは更新された状態を読み取り、レンダリングフェーズ終了後にそれに対するアクションを実行します。
とは言うものの、次のような可能性がない限り、同じエフェクトで両方のアクションを取る方が良いでしょう。
b
以外の理由で変更されることがあります。
changing a
この場合にも、同じロジックを実行することになります。
関連
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] React JSX内のループ
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
vueのグローバルがscss(mixin)を導入。
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。