【问题标题】:Input field doesn't receive keyboard events when rendering with value property?使用 value 属性渲染时输入字段不接收键盘事件?
【发布时间】:2016-04-27 01:07:30
【问题描述】:
我正在使用 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: ""
有什么想法吗?非常感谢!
【问题讨论】:
标签:
html
ruby-on-rails
reactjs
react-rails
【解决方案1】:
我已经回答了一个类似的问题,我不知道如何与您分享这个答案。所以我正在重新输入。
在 react 中,组件仅在状态更改时呈现。每当组件的状态发生变化时,就会渲染相应的组件。这意味着我们正在使用新值更新虚拟 DOM 并将其附加到主 DOM。这就是 react 的工作原理。
在输入文本字段的情况下,文本字段的值仅在用户输入某个值时才会改变。在这种情况下,我们不会更新任何状态,而是向文本字段的“值”属性添加新值。所以反应不会渲染任何东西,新值也不会添加到 DOM 中。在这里,我们违反了反应行为。所以反应不允许我们编辑输入文本字段。
为了让反应的顺利进行,它允许我们使用 on change 回调函数来设置状态。在更改文本字段的值时,状态设置为新值,因此反应渲染和 DOM 更新为新值。
我们可以使用 valuelink 属性来为输入文本添加值,而不是使用回调函数。喜欢:
getInitialState: function(){
return {
value:'' //for empty text value
}
}
对于值链接,我们必须给出状态值而不是变量值。完整理解请参考:
https://facebook.github.io/react/docs/two-way-binding-helpers.html
每当我们在文本框中输入文本时,状态都会更新,输入文本的值会设置为状态值。