ここに問題があります:ボタンのクリックで2つの関数を呼び出そうとしています。どちらの関数も状態を更新します(useStateフックを使用しています)。最初の関数はvalue1を「新しい1」に正しく更新しますが、1秒後に(setTimeout)2番目の関数が起動し、値2を「新しい2」に変更します。これは、value1を「1」に戻します。なんでこんなことが起こっているの?前もって感謝します!
import React, { useState } from "react";
const Test = () => {
const [state, setState] = useState({
value1: "1",
value2: "2"
});
const changeValue1 = () => {
setState({ ...state, value1: "new 1" });
};
const changeValue2 = () => {
setState({ ...state, value2: "new 2" });
};
return (
<>
<button
onClick={() => {
changeValue1();
setTimeout(changeValue2, 1000);
}}
>
CHANGE BOTH
</button>
<h1>{state.value1}</h1>
<h1>{state.value2}</h1>
</>
);
};
export default Test;
useState
か、代わりにを使用することを強くお勧めしますuseReducer
。
const [state, ...]
、そしてそれをセッターで参照します...常に同じ状態を使用します。
useState
各「変数」に対して1つずつ、2つの別々の呼び出しを使用します。
changeValue2
か?