使用钩子对对象进行简单的 setState
Simple setState on object using hooks
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
属性。第一次击键时,它工作正常没有错误,但是当我输入第二个字母时,我会遇到错误
Uncaught TypeError: Cannot read property 'value' of null
我可以知道空值来自哪一部分吗?从 chrome 控制台我看到下面的警告不确定它是否相关
Warning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property target
on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See https:...//react-event-pooling for more information.
更新:
如果我们没有在功能上使用 setState
,那么它工作正常吗?
const handleCityChange = event => {
setState({ ...state, city: event.target.value });
};
一个事件必须在 React 中同步处理。您可以在调用 setState
:
之前从目标中提取 value
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 };
});
};
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
属性。第一次击键时,它工作正常没有错误,但是当我输入第二个字母时,我会遇到错误
Uncaught TypeError: Cannot read property 'value' of null
我可以知道空值来自哪一部分吗?从 chrome 控制台我看到下面的警告不确定它是否相关
Warning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property
target
on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist(). See https:...//react-event-pooling for more information.
更新:
如果我们没有在功能上使用 setState
,那么它工作正常吗?
const handleCityChange = event => {
setState({ ...state, city: event.target.value });
};
一个事件必须在 React 中同步处理。您可以在调用 setState
:
value
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 };
});
};