反应:名称未通过 onChange(),e.target.name 在 DatePicker 上未定义
React: Name not coming through onChange(), e.target.name is undefined on DatePicker
我正在构建一个 MERN Stack 应用程序 ("react": "^16.14.0"
),该应用程序具有使用 DatePicker ("react-datepicker": "^4.2.1"
) 设置日期范围的表单。目前,正在选择日期值,但名称未定义。 This is throwing a TypeError and crashing the application when a date is selected.如何将 e.target.name 设置为开始日期和结束日期?
TyperError
react-dom.development.js:327
Uncaught TypeError: Cannot read properties of undefined (reading 'name')
at onChange (index.js:55)
表格数据
const [formData, setFormData] = useState({
startDate: '',
endDate: '',
})
const {
startDate,
endDate,
} = formData
日期选择器
<DatePicker
isClearable
filterDate={(d) => {return new Date() > d}}
placeholderText="Select Start Date"
dateFormat="MMMM yyyy"
selected={startDate}
selectsStart
startDate={startDate}
endDate={endDate}
onChange={(date) => onChange({ name: startDate, value: date })}
/>
onChange 函数
const onChange = (e) => {
console.log(e)
setFormData({ ...formData, [e.target.name]: e.target.value })
}
Console.log()
name: undefined
value: Tue Aug 03 2021 00:00:00 GMT-0400 (Eastern Daylight Time)
发生这种情况的原因是您的 onChange 未收到任何事件,因此 e.target 未定义。如果你看这里:
// Add the name explicitly as a string, cause you're trying to update a key by its name
onChange={(date) => onChange({ name: "startDate", value: date })}
onChange 正在接收带有名称和值键的对象。所以 onChange 函数应该是这样的:
const onChange = (item) => {
console.log(item)
// should print something like { name: "startDate", value: "the date object" }
setFormData({ ...formData, [item.name]: item.value })
}
一般我们使用event.target.name
获取字段名。
但是,当我们使用任何组件库时,这取决于库开发人员如何让位于获取字段名称的方式。所以你必须检查图书馆文件。
惊讶于您还有另一种方法。
只需要在 onChange 函数中传递字段名
<DatePicker value={dateValue} onChange={(date) => onChange(name,date)} />
onChange=(name, date)=>{ console.log(name,date) }
我正在构建一个 MERN Stack 应用程序 ("react": "^16.14.0"
),该应用程序具有使用 DatePicker ("react-datepicker": "^4.2.1"
) 设置日期范围的表单。目前,正在选择日期值,但名称未定义。 This is throwing a TypeError and crashing the application when a date is selected.如何将 e.target.name 设置为开始日期和结束日期?
TyperError
react-dom.development.js:327
Uncaught TypeError: Cannot read properties of undefined (reading 'name')
at onChange (index.js:55)
表格数据
const [formData, setFormData] = useState({
startDate: '',
endDate: '',
})
const {
startDate,
endDate,
} = formData
日期选择器
<DatePicker
isClearable
filterDate={(d) => {return new Date() > d}}
placeholderText="Select Start Date"
dateFormat="MMMM yyyy"
selected={startDate}
selectsStart
startDate={startDate}
endDate={endDate}
onChange={(date) => onChange({ name: startDate, value: date })}
/>
onChange 函数
const onChange = (e) => {
console.log(e)
setFormData({ ...formData, [e.target.name]: e.target.value })
}
Console.log()
name: undefined
value: Tue Aug 03 2021 00:00:00 GMT-0400 (Eastern Daylight Time)
发生这种情况的原因是您的 onChange 未收到任何事件,因此 e.target 未定义。如果你看这里:
// Add the name explicitly as a string, cause you're trying to update a key by its name
onChange={(date) => onChange({ name: "startDate", value: date })}
onChange 正在接收带有名称和值键的对象。所以 onChange 函数应该是这样的:
const onChange = (item) => {
console.log(item)
// should print something like { name: "startDate", value: "the date object" }
setFormData({ ...formData, [item.name]: item.value })
}
一般我们使用event.target.name
获取字段名。
但是,当我们使用任何组件库时,这取决于库开发人员如何让位于获取字段名称的方式。所以你必须检查图书馆文件。
惊讶于您还有另一种方法。
只需要在 onChange 函数中传递字段名
<DatePicker value={dateValue} onChange={(date) => onChange(name,date)} />
onChange=(name, date)=>{ console.log(name,date) }