file not found
Job status: STOPPED
我试图破坏作为对象的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
属性。第一次按键时,它工作正常,没有错误,但是,当我输入第二个字母时,我会遇到错误
未捕获的TypeError:无法读取null的属性“值”
我可以知道null的哪个部分吗?从chrome控制台中,我看到以下警告,不确定是否相关
警告:出于性能原因,此合成事件被重用。如果看到此消息,说明您正在访问已发布/无效的合成事件中的属性
city
。设置为空。如果必须保留原始的合成事件,请使用event.persist()。有关更多信息,请参见https:... // react-event-pooling。
更新:
如果我们没有在功能上使用target
,那么它工作正常吗?
setState
答案 0 :(得分:1)
必须在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 };
});
};