Я пытаюсь опубликовать запрос о дате начала, дате окончания и количестве гостей в моей программе. Почтовый запрос даты начала и окончания работает. Однако у меня возникают проблемы с отправкой входного значения количества гостей. Мое значение количества гостей возвращается как неопределенное в консоли. Скорее всего, я ошибаюсь с отправкой дескриптора, но я не знаю, как решить эту проблему. Может ли кто-нибудь помочь мне с этой проблемой?
function Search() {
const history = useHistory();
const [startDate, setStartDate] = useState(new Date());
const [endDate, setEndDate] = useState(new Date());
const [numberOfGuests, setNumberOfGuests] = useState();
const selectionRange = {
startDate: startDate,
endDate: endDate,
key: "selection"
};
const handleSubmit = event => {
setNumberOfGuests(event.numberOfGuests);
event.preventDefault()
}
function handleSelect(ranges) {
setStartDate(ranges.selection.startDate);
setEndDate(ranges.selection.endDate);
}
const onSearch = useCallback(() => {
console.info("startDate: ", startDate);
console.info("endDate: ", endDate);
console.info("numberOfGuests", numberOfGuests);
axios
.post(`/availableapartments`, {
startDate,
endDate,
numberOfGuests
})
.then((res) => {
console.info(res);
console.info(res.data);
history.push('/availableapartments')
});
}, [startDate, endDate, numberOfGuests]);
return (
<div className = "datepickersearch">
<DateRangePicker ranges = {[selectionRange]} onChange = {handleSelect} />
<h2> Number of guests</h2>
<input min = {0} defaultValue = {2} max = {7} type = "number" event = {[numberOfGuests]} onChange = {handleSubmit} />
<Button onClick = {onSearch}>Search Apartments</Button>
</div>
);
}
export default Search;





измените метод handlesubit на
const handleSubmit = event => {
setNumberOfGuests(event.target.value);
event.preventDefault()
}
значение вашего события event содержится внутри target.value
используйте event.target.value для доступа к данным
элементы ввода не принимают ни атрибуты event, ни defaultValue, как показано в вашем коде, см. https://www.w3schools.com/tags/tag_input.asp для справки React DOM придерживается собственного API DOM.
В React вы можете позволить состоянию контролировать ваш ввод, добавив к нему атрибут value, который относится к вашему состоянию:
<input
min = {0}
max = {7}
value = {numberOfGuests}
// etc..
/>
Кроме того, вам нужно добавить обработчик изменений, чтобы иметь возможность изменять состояние:
<input
value = {numberOfGuests}
onChange = {handleNumberOfGuestChange}
/>
const handleNumberOfGuestChange = (event) => setNumberOfGuests(event.target.value);
Возможно, вы захотите прочитать официальную документацию, которая очень хорошо объясняет это и даст вам все необходимое для начала работы с React https://reactjs.org/docs/forms.html#controller-components
Спасибо за помощь ! Это решило мою проблему!
Я думаю, так и должно было быть
setNumberOfGuests(event.target.value);