我在使用React时遇到了日期输入的问题。日期值来自于GraphQL,格式为
我正在将日期保存在状态中,并调用onChange函数来更新值并转换格式。
问题在于此函数会被触发两次
对于24,它被调用了两次,并在第二次调用时出现错误(见截图)。也许转换方式有误?如果我从输入中删除
dd.mm.yyyy
,但是为了设置HTML日期输入的默认值,我将其转换为yyyy.mm.dd
,并且为了再次保存数据,我需要反过来进行转换。我正在将日期保存在状态中,并调用onChange函数来更新值并转换格式。
问题在于此函数会被触发两次
onChange
,并返回NaN-NaN-NaN
(第二次运行时),但并非每次都出现,有时候正常(奇怪)。对于某些日期,它可以正常工作,例如02.03.2000
没有错误,只执行一次。对于24,它被调用了两次,并在第二次调用时出现错误(见截图)。也许转换方式有误?如果我从输入中删除
defaultValue
,则它只被调用一次。
state = {
newUser: {
geburtsdatum: "01.02.2000"
}
}
ConvertDate(htmlDate, format) {
var date = new Date(htmlDate);
var dd = date.getDate();
var mm = date.getMonth() + 1;
var yyyy = date.getFullYear();
if (dd < 10) {
dd = "0" + dd;
}
if (mm < 10) {
mm = "0" + mm;
}
if (format === "graphql") date = dd + "." + mm + "." + yyyy;
if (format === "html") date = yyyy + "-" + dd + "-" + mm;
return date;
}
onChange = e => {
let value = e.target.value;
let name = e.target.name;
if (e.target.type === "date") {
value = this.convertDate(value, "graphql");
console.log(value, name);
}
this.setState(prevState => {
return {
newUser: {
...prevState.newUser,
[name]: value
}
};
});
};
<input
type="date"
name="geburtsdatum"
defaultValue={this.convertDate(this.state.newUser.geburtsdatum, "html")}
onChange={this.onChange}
placeholder={this.getDJHTooltip("geburtsdatum")}
/>
ConvertDate
是什么?一个功能组件吗?它没有return
方法。 - vsyncrender
函数在哪里?这段代码中间的<input
元素是什么,没有任何上下文说明? - vsync