Reactjs 将反应状态传递给函数时的旧值
在我的简单应用程序中,我有两个(样式化组件)输入,类型为日期:Reactjs 将反应状态传递给函数时的旧值,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,在我的简单应用程序中,我有两个(样式化组件)输入,类型为日期: <DateInput type="date" name="startDate" value={state.startDate} onChange={(e) => handleInputChange(e)} required /> <DateInput type="date" name="endDa
<DateInput
type="date"
name="startDate"
value={state.startDate}
onChange={(e) => handleInputChange(e)}
required
/>
<DateInput
type="date"
name="endDate"
value={state.endDate}
onChange={(e) => handleInputChange(e)}
required
/>
此函数使用日期输入中的新值更新状态,然后我运行我的数据验证函数,在该函数中我传递状态以验证日期(我检查开始日期是否不大于结束日期)。
我的问题是,当我传递此状态时,它具有较旧的值,例如:
Input value: 01.01.2021
State value: 12.31.2019
Input value: 01.02.2021
State value: 01.01.2021
Input value 01.03.2021
State value: 01.02.2021
这样,我就不能比较我的约会了。我发现这是某种状态更新的延迟。我是否可以在状态更新后等待我的数据验证函数运行?状态将异步更新,并且状态在react组件的特定呈现中保持不变。要查看更新的状态,组件需要重新渲染 您可以使用以下选项之一修复问题:
- 使用
钩子,该钩子在状态更新且组件重新呈现时执行。您可以从useffect
钩子调用useffect
函数,但需要将其添加到依赖项数组中dataValidation
(确保将useEffect(() => { dataValidation(state); }, [state, dataValidation]);
函数包装在dataValidation
钩子中,以避免无限次地运行useCallback
钩子) 或者,您可以将useffect
函数的代码移动到dataValidation
钩子中useffect
useEffect(() => { // write your data validation code here }, [state]);
- 如果不想使用
hook,可以更改useffect
函数的实现,如下所示:handleInputChange
const handleInputChange = (e) => { // create an object representing the new state const newState = { ...state, [e.target.name]: e.target.value }; // pass the "newState" object to both "setState" and // "dataValidation" function setState(newState); dataValidation(newState); };
const handleInputChange = (e) => {
// create an object representing the new state
const newState = { ...state, [e.target.name]: e.target.value };
// pass the "newState" object to both "setState" and
// "dataValidation" function
setState(newState);
dataValidation(newState);
};