Запуск onChange, для которого требуется событие через программно измененный ввод

Мою проблему лучше всего объяснить на примере кода:

    <input type = "text" value = {this.state.a} onChange = {this.setA} /> // inputA
    <input type = "text" value = {this.state.b} onChange = {this.setB} /> // inputB

    setA(e) {
      this.setState({a: e.target.value});
    }

    setB(e) {
      this.setState({b: e.target.value});
      // at this point, the inputA.value changes due to state change
      setA(???) // update the state with inputA's new value
    }

Я хочу установить this.state.a на новое значение, хранящееся в inputA, однако мне нужно вызвать метод setA() вручную, потому что входное значение изменяется программно. Проблема в том, что мне нужно передать inputA, чтобы я мог получить новое значение.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
47
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Потому что вы не передаете значение на вход

<input type = "text" value = {this.state.a} onChange = {this.setA} />
<input type = "text" value = {this.state.b} onChange = {this.setB} />

Это не решает проблему обновления this.state.a в первую очередь при изменении значения inputB. Я отредактировал сообщение с большей ясностью.

jarthur 06.06.2019 03:53

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

jarthur 06.06.2019 04:08

Замените метод onChange на onChange = { () => {this.setB}}. Это будет работать..

Как это помогает установить значение a в inputA.value после вызова setB()? Для справки, я опустил код, связывающий this с методами.

jarthur 06.06.2019 04:26

Вам также необходимо изменить объявление второй функции onChange = { () => {this.setA}}

Ankush Jane 06.06.2019 05:35
Ответ принят как подходящий

Вопрос выше показывает controlled используемые входы. Все в рендере зависит от state или props. Нет определенного способа обновить состояние. Как и в этом случае, вы полагаетесь на событие change для обновления state A, в то время как ваша логика предполагает, что state a также зависит от state b. Итак, ваша функция setB должна выглядеть примерно так:

 setB(e) {
  const b = e.target.value;
  let a = this.state.a; // gives your the current value of a, which is also present in the state

  // do calculations to determine your new A
  // Then set your state like below

   this.setState({b, a }); // Both your inputs would reflect the new values in the state
}

Даже если вы не установите значение a в setB, input a сохранит свое старое значение.

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