Как я могу отправить входное значение с почтовым запросом в React?

Я пытаюсь опубликовать запрос о дате начала, дате окончания и количестве гостей в моей программе. Почтовый запрос даты начала и окончания работает. Однако у меня возникают проблемы с отправкой входного значения количества гостей. Мое значение количества гостей возвращается как неопределенное в консоли. Скорее всего, я ошибаюсь с отправкой дескриптора, но я не знаю, как решить эту проблему. Может ли кто-нибудь помочь мне с этой проблемой?

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;
  

Я думаю, так и должно было быть setNumberOfGuests(event.target.value);

szczocik 22.12.2020 15:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
398
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

измените метод 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

Спасибо за помощь ! Это решило мою проблему!

lara-div 22.12.2020 20:40

Другие вопросы по теме