我正在使用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: ""
任何想法的人?非常感谢!
答案 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
每当我们在文本框中输入文本时,状态都会更新,输入文本的值设置为状态值。