#javascript #reactjs #forms #datepicker
Вопрос:
Я использую приложение для создания стека MERN ( "react": "^16.14.0"
), которое имеет форму с использованием DatePicker ( "react-datepicker": "^4.2.1"
) для установки диапазона дат. В настоящее время выбирается значение для даты, но имя не определено. Это приводит к ошибке ввода и сбою приложения при выборе даты. Как мне установить e.target.name чтобы начать и закончить?
Ошибка типа
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)
Ответ №1:
Причина, по которой это происходит, заключается в том, что вы на обмене не получаете никакого события, поэтому цель e.не определена. если вы посмотрите здесь:
// 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 })
}
Ответ №2:
Как правило, мы получаем имя поля с помощью event.target.name
. Но в то время как мы используем любую библиотеку компонентов, это зависит от библиотеки, как разработчик библиотеки дал возможность получить имя поля. поэтому вам нужно проверить библиотечный документ.
Удивляюсь, что у тебя есть еще один способ. Просто нужно передать имя поля в функцию onChange <DatePicker value={dateValue} onChange={(date) => onChange(name,date)} />
onChange=(name, date)=>{ console.log(name,date) }