为什么React将默认复选框值复制到属性?

时间:2018-01-09 16:14:30

标签: javascript reactjs dom

live example

在此示例中,您会看到一个简单的React元素(<input>),除了typeid之外没有任何属性,它会被渲染为根元素({{1使用react-dom。由于某种原因,defaultValue和value都在实际DOM元素上使用'on'初始化。为什么会这样?这是我应该报告的错误吗?

<div id=root>

修改

在第一次编辑问题时,我假设const React = require('react'); const ReactDOM = require('react-dom'); const checkboxNoValue = React.createElement('input', { type: 'checkbox', 'id': 'checkboxElement' }); ReactDOM.render(checkboxNoValue, root); console.assert( checkboxElement.value === 'on', 'value should return "on" by HTML spec, instead got: ' + JSON.stringify(checkboxElement.value) ) // this works fine console.assert( checkboxElement.getAttribute('value') === null, 'value attribute should be empty, instead got: ' + JSON.stringify(checkboxElement.getAttribute('value')) ) console.assert( checkboxElement.defaultValue === '', 'defaultValue should be empty, instead got: ' + JSON.stringify(checkboxElement.defaultValue) ) 的{​​{1}}属性也应为空;这不是真的,如果没有另外设置,它实际上必须返回'on':https://html.spec.whatwg.org/#dom-input-value-default-on

2 个答案:

答案 0 :(得分:2)

这不是React本身的问题。这是默认情况下浏览器的行为方式。

来自MDN:

  

如果省略value属性,则为复选框的默认值   是的。

有关复选框元素的完整信息: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox

答案 1 :(得分:0)

事实证明它实际上是a bug,这应该在2018年早期的React版本中修复。