javascript - React Js - 组件正在更改要控制的不受控制的输入。这可能是由于值从 undefined 更改为 defined
问题描述
H 伙计们 - 创建了一个拆分日期输入组件(DD/MM/YYY 的 3 个输入) - 我遇到了一些问题,我使用以下行在渲染时预填充 DD/MM/YYYY 字段应该是一个类似的值所以存在“28-08-2022”:
const [intialDay, initialMonth, initialYear] = dateInputValue.split("-");
这意味着这些值已预先填充到输入中,如果值 fordateInputValue
不存在,它们将是undefined
.
在这些输入开始为空白输入后更新这些输入时,我在控制台中遇到错误(没有通过传递的值dateInputValue
)
谁能建议重构我的代码的最佳方法,以便我不会在控制台中收到这些错误?
错误:*“组件正在更改要控制的非受控输入。这可能是由值从未定义更改为已定义值引起的,这不应该发生。”*
代码片段:
const DateInput = ({ name, onValueChange, dateInputValue }: Props) => {
const [intialDay, initialMonth, initialYear] = dateInputValue.split("-");
const [day, setDay] = useState(intialDay);
const [month, setMonth] = useState(initialMonth);
const [year, setYear] = useState(initialYear);
const storedDateValue = useRef();
console.log("Base date value: " + dateInputValue);
const changeDate = useCallback(
(birthday) => {
onValueChange(birthday);
},
[onValueChange]
);
useEffect(() => {
if (day !== "" && month !== "" && year !== "") {
const dateValue = `${day}-${month}-${year}`;
if (storedDateValue.current !== dateValue) {
storedDateValue.current = dateValue;
changeDate(dateValue);
}
}
}, [day, month, year, changeDate]);
return (
<StyledInputGroup>
<label htmlFor={`${name}_day`}>
<span>Day</span>
<StyledInput
type="text"
maxLength="2"
name={`${name}_day`}
id={`${name}_day`}
label="Day"
value={day}
onChange={(e) => setDay(e.target.value)}
/>
</label>
<label htmlFor={`${name}_month`}>
<span>Month</span>
<StyledInput
type="text"
maxLength="2"
name={`${name}_month`}
id={`${name}_month`}
label="Month"
value={month}
onChange={(e) => setMonth(e.target.value)}
/>
</label>
<label htmlFor={`${name}_year`}>
<span>Year</span>
<StyledInput
type="text"
maxLength="4"
name={`${name}_year`}
id={`${name}_year`}
value={year}
onChange={(e) => setYear(e.target.value)}
/>
</label>
</StyledInputGroup>
);
};
解决方案
推荐阅读
- c - 在 main 中调用一个函数,该函数具有结构数组和函数参数中的浮点变量数组
- html - 如何使用论坛反应动态更改按钮样式?
- c# - 在我使用 xamarin prism 在调试模式下重新保存 xaml 页面之前,CollectionView 不会显示元素
- sql - 应用程序的 SQL 触发器
- python - 重定向到文件的 Powershell 输出上的拉丁重音问题
- statistics - SAS proc freq 风险比
- recaptcha - 找不到如何创建 Recaptcha 密钥
- java - 如何确保正则表达式中空格前后都有一个字母?
- c++ - C++ 对象删除崩溃
- r - R中的制图hatchedLayer函数,在hatchedLayer中使用文本时出现“参数暗示不同的行数”错误