gpt4 book ai didi

reactjs - React Hooks - useState 值无法更改

转载 作者:行者123 更新时间:2023-12-03 14:06:19 25 4
gpt4 key购买 nike

问题

每当我点击输入时,我都想获取更新后的钩子(Hook)状态的。但我总是得到初始值,而不是更新后的值。

代码

import React, { useState } from "react";
import ReactDOM from "react-dom";
import ContentEditable from "react-contenteditable";

const ItemCol = props => {
const [value, setValue] = useState("Initial Value");

const onChange = event => {
setValue(event.target.value);
console.log("onChange: " + value);
};

const keyDown = event => {
if (event.keyCode === 13) {
event.preventDefault();
//Value should be changed, but did not change
console.log("Enter Pressed: " + value);
}
};

return (
<ContentEditable
html={value}
onKeyDown={React.useCallback(keyDown)}
onChange={React.useCallback(onChange)}
/>
);
};

const rootElement = document.getElementById("root");
ReactDOM.render(<ItemCol />, rootElement);

CodeSandBox.io:https://codesandbox.io/embed/pensive-worker-31l3r

注意:keyCode 13 是 Enter。

注2:我正在使用react-contenteditable 依赖项。 (https://www.npmjs.com/package/react-contenteditable)

请帮助我,因为这个问题我已经困扰了好几个小时了。谢谢!

最佳答案

ContentEditable 组件似乎会记住 onKeydown 方法,因此每当您调用它时,它都会打印其初始闭包中的值,这就是为什么您始终具有初始值的原因。

要解决此关闭问题,您可以将值保留在引用中并对其进行更改

const ItemCol = props => {
const [value, setValue] = useState("Initial Value");
const valRef = useRef(value);
const onChange = event => {
setValue(event.target.value);
valRef.current = event.target.value;
};

const keyDown = event => {
if (event.keyCode === 13) {
event.preventDefault();
//Value should be changed, but did not change
console.log("Enter Pressed: " + valRef.current);
}
};

return (
<ContentEditable
html={value}
onKeyDown={keyDown}
onChange={React.useCallback(onChange)}
/>
);
};

Working demo

关于reactjs - React Hooks - useState 值无法更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56438643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com