在另一个 useState 中设置 useState
Setting useState within another useState
我正在尝试设置时间 (mm:ss),方法是通过 useState
的一次使用分别获取分钟和秒的输入,并将它们与另一个组合以跟踪整个表单数据,但是我似乎无法将组合字符串推送到表单数据中...
我想我可能以某种方式错误地设置了数据...
const Modal = ({show, handleClose, handleAdd, children}) => {
const today = new Date().toISOString().substr(0, 10);
let initialFormState = {
date: today,
distance: '5.23',
time: ''
};
let initialTimeState = {
mins: 0,
secs: 0
};
const [formData, setFormData] = useState(initialFormState);
const [timeData, setTimeData] = useState(initialTimeState);
const submitData = event => {
event.preventDefault();
console.log({timeData});
// Add correctly formatted time to main formData
const {mins, secs} = timeData;
const time = `${mins}:${secs}`;
setFormData({...formData, 'time': time});
console.log(formData); // Here I can see that the 'time' field is empty...
}
return (
...
);
};
export default Modal;
setFormData
更改是异步发生的,遗憾的是您不会立即看到更改。相反,您可以使用 useEffect
钩子来捕获状态的变化。
改为尝试以下操作:
useEffect(() => {
console.log(formData);
}, [formData]);
进一步了解 useEffect
挂钩 Using the Effect Hook link。
我正在尝试设置时间 (mm:ss),方法是通过 useState
的一次使用分别获取分钟和秒的输入,并将它们与另一个组合以跟踪整个表单数据,但是我似乎无法将组合字符串推送到表单数据中...
我想我可能以某种方式错误地设置了数据...
const Modal = ({show, handleClose, handleAdd, children}) => {
const today = new Date().toISOString().substr(0, 10);
let initialFormState = {
date: today,
distance: '5.23',
time: ''
};
let initialTimeState = {
mins: 0,
secs: 0
};
const [formData, setFormData] = useState(initialFormState);
const [timeData, setTimeData] = useState(initialTimeState);
const submitData = event => {
event.preventDefault();
console.log({timeData});
// Add correctly formatted time to main formData
const {mins, secs} = timeData;
const time = `${mins}:${secs}`;
setFormData({...formData, 'time': time});
console.log(formData); // Here I can see that the 'time' field is empty...
}
return (
...
);
};
export default Modal;
setFormData
更改是异步发生的,遗憾的是您不会立即看到更改。相反,您可以使用 useEffect
钩子来捕获状态的变化。
改为尝试以下操作:
useEffect(() => {
console.log(formData);
}, [formData]);
进一步了解 useEffect
挂钩 Using the Effect Hook link。