personnages

React 实现了一套与浏览器无关的 DOM 系统,兼顾了性能和跨浏览器的兼容性。借此机会,我们清理了浏览器 DOM 实现中一些不一致的问题。

在React中,所有DOM属性和属性(包括事件处理程序)都应该是camelCased的。例如,HTML属性tabindex对应tabIndex于React中的属性。唯一的例外是aria-*data-*属性,应小写。例如,你可以继续aria-label作为aria-label

属性差异

React和HTML之间有许多不同的属性:

checked

checked属性由类型checkbox或的组件支持radio。您可以使用它来设置组件是否被选中。这对于构建受控组件非常有用。defaultChecked是不受控制的等价物,用于设置组件是否在第一次安装时进行检查。

className

要指定一个CSS类,请使用该className属性。这适用于所有常规的DOM和SVG元素一样

如果您使用Web组件的反应(这是不常见的),请改用该class属性。

dangerouslySetInnerHTML

dangerouslySetInnerHTML是ReactinnerHTML在浏览器DOM中使用的替代品。一般来说,从代码中设置HTML是有风险的,因为很容易让您的用户无意中发现跨站脚本攻击(XSS)。因此,您可以直接从React中设置HTML,但您必须输入dangerouslySetInnerHTML并使用__html密钥传递对象,以提醒自己危险。例如:

function createMarkup() { return {__html: 'First · Second'};}function MyComponent() { return 
;}

htmlFor

既然for是JavaScript中的保留字,React元素就会用到htmlFor

onChange

onChange事件的行为与您所期望的一样:每当表单字段发生更改时,将触发此事件。我们故意不使用现有的浏览器行为,因为onChange它的行为不当,React依靠此事件来实时处理用户输入。

selected

selected属性由组件支持。您可以使用它来设置组件是否被选中。这对于构建受控组件非常有用。

style

style属性接受带有camelCased属性的JavaScript对象而不是CSS字符串。这与DOMstyleJavaScript属性一致,效率更高,并可防止XSS安全漏洞。例如:

const divStyle = { color: 'blue', backgroundImage: 'url(' + imgUrl + ')',};function HelloWorldComponent() { return 
Hello World!
;}

请注意,样式不是自动复制的。要支持旧版浏览器,您需要提供相应的样式属性:

const divStyle = { WebkitTransition: 'all', // note the capital 'W' here msTransition: 'all' // 'ms' is the only lowercase vendor prefix}; function ComponentWithTransition() { return 
This should work cross-browser
;}

样式键是驼峰式的,以便与从JS(例如node.style.backgroundImage)访问DOM节点上的属性一致。除ms大写字母之外的供应商前缀应以大写字母开头。这就是为什么WebkitTransition有一个大写“W”。

React会自动将“px”后缀附加到某些内联样式属性。例如:

// This:
Hello World!
;// Becomes:
Hello World!

不是所有的样式属性都转换为像素字符串。某些那些仍然无单位(例如zoomorderflex)。无单位属性的完整列表可以在这里看到。

suppressContentEditableWarning

通常情况下,当有孩子的元素也被标记为时会有警告contentEditable,因为它不起作用。该属性会抑制该警告。除非你正在构建一个像手动管理的Draft.js这样的库,否则不要使用它contentEditable

value

value属性由