ReactJS: Переключатель в форме

#javascript #reactjs #reactstrap

Вопрос:

Я использую reactstrap для создания формы, но у меня проблема с переключателем, потому что я не понимаю, как сохранить значение.

Переменной формы является:

 const [formModel, setFormModel] = useState({
    name: '',
    deletedDate: '',
  });
 

Моя форма такова:

 <AvForm model={formModel} onSubmit={filterResults} onReset={handleFormReset}>
<h3 className="text-center">Form</h3>
              <Row>
                <Col md="6">
                  <AvGroup>
                    <Label id="name" for="name">
                      Name
                    </Label>
                    <AvField
                      id="name"
                      data-cy="name"
                      type="text"
                      name="name"
                      onChange={handleChange}
                      value={formModel.name}
                    />
                  </AvGroup>
<FormGroup check>
                      <Label check>
                        <Input
                          id="deletedDate"
                          data-cy="deletedDate"
                          type="radio"
                          name="deletedDate"
                          value="true"
                          onChange={handleChange}
                        />{' '}
                        Yes
                      </Label>
                    </FormGroup>
   <FormGroup check>
                      <Label check>
                        <Input
                          id="deletedDate"
                          data-cy="deletedDate"
                          type="radio"
                          name="deletedDate"
                          value="false"
                          onChange={handleChange}
                        />{' '}
                        No
                      </Label>
                    </FormGroup>
</AvGroup>
 

Мой результат фильтрации таков:

     const filterResults = (event, errors, values) => {
        console.log('values ', values);
        let entity = null;
        if (errors.length === 0) {
          entity = {
            ...values,
          };
        }
        //other code...

  const handleChange = e => {
    console.log('e ', e);
    const { name, value } = e.target;
    console.log('name ', name, ' value ', value);
    setFormModel(prevState => ({
      ...prevState,
      [name]: value,
    }));
  };
 

Теперь, когда я отправляю форму, если я проверил радиобуттон DeletedDate в функции filterResult, у меня нет никакого значения об этом (но у меня есть значение для имени)

Как я могу правильно использовать переключатель, чтобы сохранить значение?

Огромное спасибо

Ответ №1:

Основная проблема заключается в том, что вам не хватает checked атрибута:

  <label>
    <input
      id="deletedDate"
      data-cy="deletedDate"
      type="radio"
      name="deletedDate"
      value="true"
      checked={formModel.deletedDate === "true"}
      onChange={handleChange}
    />{" "}
    Yes
  </label>

  <label>
    <input
      id="deletedDate"
      data-cy="deletedDate"
      type="radio"
      name="deletedDate"
      value="false"
      checked={formModel.deletedDate === "false"}
      onChange={handleChange}
    />{" "}
    No
  </label>
 

Посмотрите, как он работает в песочнице

Изменить: Я добавил обработчик отправки в песочницу.

Комментарии:

1. Спасибо, вы правы! Но у меня есть проблема, почему я не могу увидеть значение моей переменной в filterResult? В журнале консоли я вижу только значения других переменных

2. Я не знаю, что это за компонент AvForm , поэтому я не могу вам сильно помочь в этом. Тем не менее, я добавил некоторую обработку отправки в песочницу. Посмотри.