使用value属性进行渲染时,输入字段不会收到键盘事件?

时间:2016-01-11 03:21:14

标签: html ruby-on-rails reactjs react-rails

我正在使用react-rails gem来使用ReactJS for Rails。 奇怪的是,如果我在渲染React组件时设置非空值属性,输入字段将不会收到任何键盘事件

这不起作用!

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

但它有效

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

任何想法的人?非常感谢!

1 个答案:

答案 0 :(得分:2)

我已经回答了一个与此相似的问题,我不知道如何与你分享这个答案。所以我正在重新打字。

在反应中,只有在状态发生变化时,组件才会呈现。每当组件的状态发生变化时,相应的组件就会呈现。这意味着我们正在使用新值更新虚拟DOM并将其附加到主DOM。这就是反应如何发挥作用。

对于输入文本字段,仅当用户输入某个值时,文本字段的值才会更改。在这种情况下,我们不会更新任何状态,我们正在为"值"添加新值。文本字段的属性。因此,反应不会呈现任何内容,并且不会将新值添加到DOM中。在这里,我们违反了反应行为。所以反应不允许我们编辑输入文本字段。

为了获得平稳的反应流,它允许我们使用改变回调函数来按顺序设置状态。在更改文本字段的值时,使用新值设置状态,以便反应呈现并使用新值更新DOM。

我们可以使用valuelink属性为输入文本添加值,而不是使用回调函数。像:

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

对于价值链接,我们必须给出状态值而不是变量值。如需完整理解,请参阅:     https://facebook.github.io/react/docs/two-way-binding-helpers.html

每当我们在文本框中输入文本时,状态都会更新,输入文本的值设置为状态值。