Подключите html-элемент формы типа object к объекту состояния в React

У меня есть два элемента формы, которые входят в один и тот же массив

<div className = "form-group">
            <input
              className = "form-control"
              type = "text"
              name = "user[username]"
              value = {this.state.user.username}
              onChange = {this.onChange}
              placeholder = "Customer Name"
            />
          </div>
          <div className = "form-group">
            <input
              className = "form-control"
              type = "text"
              name = "user[mobilenumber]"
              value = {this.state.user.mobilenumber}
              onChange = {this.onChange}
              placeholder = "Customer mbole no."
            />
          </div>

В конструкторе я объявляю состояние следующим образом

this.state = {
  user: { username: "", mobilenumber: "" },
  clothname: "",
  description: "",
  errors: {}
};

Но при изменении значений в форме для пользователя [имя пользователя] и пользователя [номер мобильного] введенные значения не заполняются в пользовательском объекте состояния. Пока он работает для двух других переменных состояния «ткань» и «описание». У них есть простой атрибут имени, такой как «название ткани».

И метод onChange

onChange(event) {
this.setState({ [event.target.name]: event.target.value });
}

Можете ли вы опубликовать метод onChange

Priyesh Kumar 02.06.2018 16:48

обновлен метод onChange

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

Ответы 1

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

React обновляет дом только тогда, когда он может обнаруживать изменения. this.state.user - это объект. Когда вы изменяете свойство this.state.user, его ссылка не меняется, поэтому React считает, что пользовательский объект не изменен, и не обновляет DOM.

Решение - полностью обновить объект.

onChange(e) {
    let state = {..this.state};
    state[e.target.name] = e.target.value;
    this.setState(state);
}

// I prefer this one
onUserChange(e) {
    let user = {...this.state.user};
    user[e.target.name] = e.target.value;
    this.setState({ user });
}

Попался. Я должен выделить name = user [username] и user [mobilenumber] из html-элементов и сделать их простыми, такими как username и mobilenumber. Также свяжите элементы с другим методом onUserChange. Дай мне попробовать. Я надеялся, что можно будет изменить атрибут «name» элемента html, чтобы тот же onChange () уместил его.

Braj 02.06.2018 17:39

@ piyesh-kumar ваше предложение сработало. Тем не менее, можете ли вы придумать какой-либо способ манипулировать атрибутом «name» элемента html, чтобы изменение можно было учесть в том же методе onChange.

Braj 02.06.2018 18:51

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