通过事件处理程序更改一次后,反应状态不会更新
React state not updating after one time change through event handler
我有一个简单的状态来处理用户可以重新记录多少次,
const [retakes, setRetakes] = useState(0);
const onRerecord = () => {
console.log(retakes + 1, "rere");
setRetakes(retakes + 1);
};
每次用户要求从 react-ziggeo
重新录制时 onRerecord
都会触发:rerecordings
<ZiggeoRecorder
apiKey={process.env.ZIGGEO_API_TOKEN}
video={videoToken}
onProcessed={onProcessed}
recordings={3}
onRerecord={onRerecord}
/>
第一次重新记录状态更新就好了,但是之后状态仍然相同,它根本没有改变,你可以在这里看到 console.log
s 是如何为 1 "rere"
每次都一样。
试试这个 - 更新以前的状态。
const [retakes, setRetakes] = useState(0);
const onRerecord = () => {
console.log(retakes + 1, "rere");
setRetakes(retakes => retakes + 1);
};
ZiggeoRecorder
似乎正在缓存 onRerecord
的第一个引用并在之后使用相同的实例。
并且当您的 onRerecord
结束时 retakes
它总是在以后的调用中使用相同的值:
您可以使用 useState
的功能变体来解决此问题:
setRetakes(retakes => retakes + 1);
我有一个简单的状态来处理用户可以重新记录多少次,
const [retakes, setRetakes] = useState(0);
const onRerecord = () => {
console.log(retakes + 1, "rere");
setRetakes(retakes + 1);
};
每次用户要求从 react-ziggeo
重新录制时 onRerecord
都会触发:rerecordings
<ZiggeoRecorder
apiKey={process.env.ZIGGEO_API_TOKEN}
video={videoToken}
onProcessed={onProcessed}
recordings={3}
onRerecord={onRerecord}
/>
第一次重新记录状态更新就好了,但是之后状态仍然相同,它根本没有改变,你可以在这里看到 console.log
s 是如何为 1 "rere"
每次都一样。
试试这个 - 更新以前的状态。
const [retakes, setRetakes] = useState(0);
const onRerecord = () => {
console.log(retakes + 1, "rere");
setRetakes(retakes => retakes + 1);
};
ZiggeoRecorder
似乎正在缓存 onRerecord
的第一个引用并在之后使用相同的实例。
并且当您的 onRerecord
结束时 retakes
它总是在以后的调用中使用相同的值:
您可以使用 useState
的功能变体来解决此问题:
setRetakes(retakes => retakes + 1);