[解決済み】React Hooks useEffectでoldValuesとnewValuesを比較する方法は?
2022-04-17 11:41:20
質問
例えば、rate、sendAmount、receiveAmountの3つの入力があるとします。この3つの入力を、useEffectのdiffパラメータに設定します。ルールは以下の通りです。
-
sendAmountが変更された場合、次のように計算します。
receiveAmount = sendAmount * rate
-
receiveAmountが変化した場合、次のように計算します。
sendAmount = receiveAmount / rate
-
レートが変化した場合、次のように計算します。
receiveAmount = sendAmount * rate
時sendAmount > 0
または計算するsendAmount = receiveAmount / rate
時receiveAmount > 0
以下は、codesandboxです。 https://codesandbox.io/s/pkl6vn7x6j を使用して、問題を実証しています。
を比較する方法はありますか?
oldValues
と
newValues
のように
componentDidUpdate
この場合、3つのハンドラを作成する必要はないのでしょうか?
ありがとうございます
以下は、私の最終的な解決策です。
usePrevious
https://codesandbox.io/s/30n01w2r06
この場合、複数の
useEffect
なぜなら、それぞれの変更が同じネットワーク呼び出しにつながるからです。そのため
changeCount
を使用して、その変更も追跡します。この
changeCount
また、ローカルからの変更のみを追跡するのにも便利で、サーバーからの変更のために不必要なネットワークコールを防ぐことができます。
解決方法は?
カスタムフックを書くと を使用して、以前のプロップス ユーズレフ
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
で使用し、それを
useEffect
const Component = (props) => {
const {receiveAmount, sendAmount } = props
const prevAmount = usePrevious({receiveAmount, sendAmount});
useEffect(() => {
if(prevAmount.receiveAmount !== receiveAmount) {
// process here
}
if(prevAmount.sendAmount !== sendAmount) {
// process here
}
}, [receiveAmount, sendAmount])
}
しかし、2つのメソッドを使用すれば、より明確で、読みやすく、理解しやすいでしょう。
useEffect
各変更を別々に処理したい場合
関連
-
[解決済み] ReactのuseEffectでローディング関数を1回だけ呼び出す方法
-
[解決済み] react jsでウィンドウを開くイベントを処理するにはどうすればよいですか?
-
[解決済み] React JSでは、状態を直接変異させない、setState() react/no-direct-mutation-stateを使用する。
-
[解決済み] Reactプロジェクトに.envファイルを追加する
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] Reactコンポーネントに条件付きで属性を追加するにはどうすればよいですか?
-
[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
-
[解決済み] React Hook useEffectの非同期関数に関する警告:useEffect関数はクリーンアップ関数か何も返さないこと
-
[解決済み] React HooksでcomponentWillMount()を使用するには?
-
[解決済み] react hooks useEffect() cleanup for only componentWillUnmount?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] Next.jsでWebSocketを利用する
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] reactstrapのドロップダウンで選択されたアイテムを設定する方法は?
-
[解決済み] axios-mock-adapter onGet mock data not effective.
-
[解決済み] eslint: no-case-declaration - case ブロックで予期しない字句の宣言があった。
-
[解決済み] Reactのrender()にFont Awesomeのアイコンを入れる方法