Вопрос 1
Меня смущает функция handleInputChange (), которая устанавливает переменную target, равную event.target - это предварительно созданный атрибут, который возвращает сработавший элемент DOM событие. Переменная value позволяет target.name получить имя и присваивает его target.checked как истинное, а target.value как ложное. «Target.checked» извлекает текущее состояние isOnGoing, которое в настоящее время является логическим значением true, но что извлекает «target.value»?
Ответ 1
React использует Syntheti c события , которые быстро возвращаются обратно в пул событий для повторного использования, поэтому обычно сохраняют или деструктурируют объект события для сохранения в состоянии, которое также является асинхронным по своей природе, т. е. обновление состояния не выполняется. t происходит немедленно, и объект события может быть аннулирован и возвращен обратно в пул событий до обработки обновления состояния.
handleInputChange(event) {
// save the target object for future reference
const target = event.target;
// Check if the target is the checkbox or text input to save the value
const value = target.name === 'isGoing' ? target.checked : target.value;
// Save the input name, i.e. name = state object
const name = target.name;
this.setState({
[name]: value
});
}
Как это работает
Обработчик обращается к имени и проверке / значению входа, поэтому, предоставляя то же имя входам, которые используются в состоянии, обработчик может динамически сохранять правильное значение в свойство правильного состояния.
IE, если флажок установлен, то целевое имя - "isGoing"
, а значение - это целевое проверенное значение, true
или false
. setState
преобразуется во что-то похожее на
this.setState({ isGoing: true });
Более общий или более общий c обработчик должен проверять тип вместо того, чтобы правильно получить доступ к проверенному свойству или свойству обычного значения.
handleInputChange(event) {
// Destructure type, checked, name, and value from event.target
const { type, checked, name, value } = event.target;
this.setState({ [name]: type === 'checkbox' ? checked : value });
}
но что получает "target.value"?
Как правило, в этом случае он просто обращается к полю target.value
потенциально любого ввод, который использует handleInputChange
в качестве обратного вызова. В этом конкретном случае c это будет значение ввода "numberOfGuests"
.
Вопрос 2
Кроме того, просто чтобы убедиться, что я правильно понимаю это: равно ли имя переменной event.target.name или я это неправильно понимаю?
Ответ 2
Да, const name = target.name;
просто сохраняет целевое имя события в переменной позвонил name
. Аналогично, const { name } = target
эквивалентно.