Получение значения проверенной радиокнопки с использованием Material UI Radio

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

В одном файле у меня есть:

<FormControl component = "fieldset" name = "method-of-payment">
    <RadioGroup onChange = {this.handleChangeEvent} >
        <FormControlLabel value = "credit" control = {<Radio />} label = "Credit Card"/>
        <FormControlLabel value = "check" control = {<Radio />} label = "Check"/>
        <FormControlLabel value = "purchase-order" control = {<Radio />} label = "Purchase Order"/>
     </RadioGroup>
</FormControl>

И я пытаюсь получить значение, делая это в другом файле (это сработало для всего остального):

this.setState({
    method-of-payment: document.getElementsByName('method-of-payment')[0].value
})

Но мне не повезло получить правильное значение.

Я ценю любую помощь.

Обновлено: вот ссылка на документацию, которой я следовал: https://material-ui.com/components/радио-кнопки/

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

Ответы 3

Ответ принят как подходящий

Похоже, что это может быть подход, подверженный ошибкам, и в целом прямой доступ к элементам является анти-шаблоном React.

Лучшим способом было бы сохранить проверенное значение элемента <Radio> как свойство в вашем состоянии. Используйте реквизит onChange вашего <RadioGroup>, чтобы подключиться к изменению выбора, сохраните его в своем состоянии и используйте его в реквизите value вашего содержащего <RadioGroup>.

Вы должны добавить прослушиватель событий, а затем обновить свое состояние на основе value, которое вы можете получить от события. Если вы подключите его таким образом, вам не нужно обращаться к элементу, чтобы найти его значение — вы уже знаете его, поскольку он находится в вашем состоянии.

Базовый пример будет выглядеть примерно так:

class MyForm extends Component {
  state = { selected: "credit" };
  handleChangeEvent = ev => {
    this.setState({ selected: ev.target.value });
  };
  render() {
    const { selected } = this.state;
    return (
      <FormControl component = "fieldset" name = "method-of-payment">
        <RadioGroup onChange = {this.handleChangeEvent} value = {selected}>
          <FormControlLabel
            value = "credit"
            control = {<Radio />}
            label = "Credit Card"
          />
          <FormControlLabel value = "check" control = {<Radio />} label = "Check" />
          <FormControlLabel
            value = "purchase-order"
            control = {<Radio />}
            label = "Purchase Order"
          />
        </RadioGroup>
      </FormControl>
    );
  }
}

Codepen здесь

Очень ценю ответ! На самом деле это выглядит почти идентично моему коду, я, вероятно, должен был показать все. Проблема заключается в том, чтобы найти способ получить это текущее значение состояния из другого файла, который выполняет проверку.

llamagish 17.06.2019 22:33

это выглядит проще

document.querySelector('[name = "method-of-payment"]:checked')

Определите свое изменение, как показано ниже

onChange = {(e, val)=>console.info(val)

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 21.03.2022 18:31

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