value在事件处理程序中是过时的,因为它从定义它的闭包中获取其值。除非每次
value更改都重新订阅新的事件处理程序,否则它将不会获得新值。
解决方案1:对发布效果进行第二个论证
[value]。这使事件处理程序获得正确的值,但也使效果在每次击键时再次运行。
解决方案2:使用
ref将最新的存储
value在组件实例变量中。然后,产生一个效果,每当
value状态更改时,该效果仅更新此变量。在事件处理程序中,请使用
ref,而不是
value。
const [value, setValue] = useState(initialValue);const refValue = useRef(value);useEffect(() => { refValue.current = value;});const handleEvent = (msg, data) => { console.info("Value in event handler: ", refValue.current);};https://reactjs.org/docs/hooks-faq.html#what-can-i-do-if-my-effect-
dependencies-change-too-oftenten
该页面上似乎还有其他一些解决方案也可能起作用。非常感谢@Dinesh的帮助。



