Поле ввода не получает события клавиатуры при рендеринге со свойством value?

Я использую гем react-rails для работы с ReactJS для Rails. Странно то, что если я устанавливаю свойство непустого значения при рендеринге компонента React, поле ввода не будет получать никаких событий клавиатуры.

Это не работает!

React.DOM.input
  type: 'text'
  className: 'form-control'
  value: "ABC"

Но это работает

React.DOM.input
  type: 'text'
  className: 'form-control'
  value: ""

Есть идеи, ребята? Большое спасибо!


person Hieu Pham    schedule 11.01.2016    source источник
comment
Второй пример также должен сделать ввод только для чтения. См. stackoverflow.com/questions/28315205/ для получения дополнительной информации   -  person Michelle Tilley    schedule 11.01.2016
comment
Да, я вижу, спасибо, Мишель.   -  person Hieu Pham    schedule 11.01.2016


Ответы (1)


Я ответил на один вопрос, подобный этому, я не знаю, как поделиться этим ответом с вами. Так что я перепечатываю это.

В реакции компонент отображается только при изменении состояния. Всякий раз, когда состояние компонента изменяется, соответствующий компонент визуализируется. Это означает, что мы обновляем виртуальный DOM новым значением и присоединяем его к основному DOM. Вот как работает реакция.

В случае текстовых полей ввода значение текстовых полей изменяется только тогда, когда пользователь вводит какое-либо значение. В этом случае мы не обновляем какое-либо состояние, мы добавляем новое значение в свойство «значение» текстового поля. Таким образом, реакция ничего не отображает, и новое значение не добавляется в DOM. Здесь мы нарушаем поведение реакции. Таким образом, реакция не позволит нам редактировать текстовые поля ввода.

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

Вместо использования функции обратного вызова мы можем использовать свойство valuelink для добавления значения к вводимому тексту. как:

getInitialState: function(){
  return {
   value:'' //for empty text value
  }
}

Для ссылки на значение мы должны указать значение состояния вместо значения переменной. Для полного понимания см.: https://facebook.github.io/react/docs/two-way-binding-helpers.html

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

person prudhvi seeramreddi    schedule 26.04.2016
comment
Спасибо за ваш подробный ответ, это действительно полезно для меня :) - person Hieu Pham; 26.04.2016