reactjs - 使用钩子对对象进行简单的 setState
问题描述
const [state, setState] = useState({ city: '', country: '' });
const handleCityChange = event => {
setState(prevState => {
console.log(prevState);
return { ...prevState, city: event.target.value };
});
};
//...
<input
type="text"
placeholder="city"
value={state.city}
onChange={handleCityChange}
/>
我正在尝试解构prevState
,这是一个对象,并且只更新city
属性。在第一次击键时,它工作正常,没有错误,但是一旦我输入第二个字母,我就会出错
未捕获的类型错误:无法读取 null 的属性“值”
我可以知道 null 来自哪个部分吗?从 chrome 控制台我看到下面的警告不确定它是否相关
警告:出于性能原因,此合成事件被重用。如果您看到这一点,则表示您正在访问已
target
发布/无效合成事件的属性。这设置为空。如果您必须保留原始合成事件,请使用 event.persist()。有关更多信息,请参阅 https://react-event-pooling。
更新:如果我们没有在setState
功能上使用,那么它工作正常吗?
const handleCityChange = event => {
setState({ ...state, city: event.target.value });
};
解决方案
事件必须在 React 中同步处理。您可以value
在调用之前从目标中提取setState
:
const handleCityChange = event => {
const { value } = event.target;
setState(prevState => {
return { ...prevState, city: value };
});
};
另一种处理方式是persist
事件,它可以异步使用。
const handleCityChange = event => {
event.persist();
setState(prevState => {
return { ...prevState, city: event.target.value };
});
};
推荐阅读
- ios - 真实 iOS 设备上的 Fluttter 错误:“未找到模块‘fluttertoast’”
- reactjs - 如果在 reactjs 的 localstorage 中设置了值,则显示特定组件
- c++ - 如何检查 CreateProcess 是否正在工作或正在运行?
- postgresql - 在 ubuntu 上安装 pgadmin4 pgadmin4-apache2 时出错
- c - 我们什么时候使用结构变量和结构指针?
- javascript - 烧瓶中带有 url_for() 的 Window.location.href?
- rest - 在某些情况下防止 RESTful api 中的竞争条件
- python-3.x - 我如何从作者那里获取文本作为在他们执行命令时触发某些响应的一种方式?
- c# - 如何从 C# 导出到 MS Word 中的文本创建多级列表
- mysql - 无法使用域名远程访问Mysql