为什么 react 将输入[类型=“文本”] 字段设为只读,除非我提供 onChange 回调
Why does react make input[type="text"] fields readonly unless I supply onChange callback?
最初我有:
<input type="text"id="requested" name="requested" ref="requested" />
这是只读的。
将其更改为:
<input type="text" onChange={function() {}} id="requested" name="requested" ref="requested" />
使其接受来自键盘的输入。为什么会这样?
您列出的示例不是只读的。请参阅此 JSFiddle: http://jsfiddle.net/BinaryMuse/13sbw3dy/
如果将 value={whatever}
属性添加到输入中,使其成为受控组件,则添加更新 whatever
值的 onChange
处理程序是只读的。来自 React 文档:
为什么选择受控组件?
在 React 中使用表单组件(如
<input>
)带来了编写传统表单 HTML 时所没有的挑战。例如,在 HTML 中:<input type="text" name="title" value="Untitled" />
这将呈现使用值初始化的输入,
Untitled
.当用户更新输入时,节点的值属性将更改。但是,node.getAttribute('value')
仍将返回初始化时使用的值,Untitled
.与 HTML 不同,React 组件必须表示视图在任何时间点的状态,而不仅仅是在初始化时。例如,在 React 中:
render: function() { return <input type="text" name="title" value="Untitled" />; }
由于此方法描述任何时间点的视图,因此文本输入的值应始终
Untitled
。
在 react 中,组件仅在状态更改时才呈现。每当组件的状态发生变化时,相应的组件就会呈现。这意味着我们正在用新值更新虚拟 DOM,并将其附加到主 DOM。这就是反应的工作原理。
对于输入文本字段,文本字段的值仅在用户输入某个值时更改。在这种情况下,我们不更新任何状态,而是向文本字段的"value"属性添加新值。所以反应不会渲染任何东西,新值也不会添加到 DOM 中。在这里,我们违反了反应行为。因此,反应不允许我们编辑输入文本字段。
为了获得反应的平滑流程,它允许我们使用更改回调函数来设置状态。在更改提交的文本的值时,状态集与新值一起设置,以便反应渲染和 DOM 使用新值更新。
我们可以使用 valuelink 属性为输入文本添加值,而不是使用回调函数。 喜欢:
getInitialState: function(){
return {
value:'' //for empty text value
}
}
对于值链接,我们必须给出状态值而不是变量值。为了完全理解,请参考: https://facebook.github.io/react/docs/two-way-binding-helpers.html
每当我们在文本框中输入文本时,状态都会更新,输入文本的值设置为状态值。
- 在非我的页面上重新加载CSS
- 为什么 Jasmine 在我设置 selectedIndex 时抱怨“试图分配给只读属性”
- 禁用与只读不适用于非交互式但值保持器输入
- 我怎样才能以非阻塞的方式处理数字
- 以非像素为单位获取HTML DOM元素的CSS高度,在我的例子中是英寸
- 为什么 react 将输入[类型=“文本”] 字段设为只读,除非我提供 onChange 回调
- jQuery / bubbling - 如何为非登录用户停止我的 JavaScript 代码
- jshint 的解决方案“最好用点表示法写”当我有效使用非点表示法时
- WebDev新手:我应该如何处理将复杂对象从PHP传递到PHP(非连续)
- 如何在选择框中设置只读 false,当选中复选框时,它将是可编辑的.在我的jquery代码中,禁用不起作用
- 我如何阻止非特权用户的部分内容
- breezejs:非标量导航属性是只读的(多对多问题)
- 我可以在Javascript的DOM节点中存储非文本属性吗?
- 我的网站中是否需要 jQuery 脚本的非缩小版本
- 我可以使用 CKEDITOR 工具栏,但内容是锁定的/只读的
- 我可以通过jQuery调用创建非自闭合标签吗?
- 我可以在谷歌地图样式API上隐藏非海洋吗?
- 如何将具有只读成员的 javascript 对象复制到非只读成员
- 用JS中的字符串为所有非站点内的链接加上前缀..你能校对一下我拼凑的这个快速的小脚本吗
- Angular Js:如果我需要实时将状态从活动更改为非活动,请使用ng