此文章是翻译DOM Elements这篇React(版本v15.4.0)官方文档。
DOM Elements
React 为了性能和跨浏览器兼容实现了一个独立的DOM 系统。我们有机会去除一些粗糙的浏览器实现。
在React 中,所有的DOM 属性(properties)和特性(attributes)(包括事件句柄)都应该是camelCased。例如,HTML 特性tabindex
对于React 特性tabIndex
。特例是aria-*
和data-*
特性应该是lowercased。
Differences In Attributes
在React 和HTML 中有许多特性的工作是不同的:
checked
checkbox
或radio
类型的<input>
component 是支持checked
特性。你可以使用它用来设置一个component 是否被选中(checked)。这对于构建可控的component 是有用的。defaultChecked
等同于不可控的,用来设置一个component 首次加载时是否被选中。
className
配置CSS class,使用className
特性。这应用在所有的正规的DOM 和SVG 的元素像<div>
,<a>
以及其它元素。
如果你用Web Component (这并不常用)来使用React,使用class
特性来替代。
dangerouslySetInnerHTML
dangerouslySetInnerHTML
是React 中用来替代浏览器DOM 中的innerHTML
。通常,在代码中设置HTML 是危险的因为它很容易无意的暴露你的用户受到cross-site scripting(XSS)攻击。所以,你可以在React 中直接设置HTML,但是你必须使用dangerouslySetInnerHTML
并传递一个代码__html
key 的对象,用来提醒你这是危险的。例如:
1 | function createMarkup(){ |
htmlFor
由于for
是JavaScript 中的保留字,所以React element 使用htmlFor
来替代。
onChange
onChange
事件行为就如果你期待的那样:无论何时一个表单域改变了,这个事件都会触发。我们有意不使用已经存在的浏览器行为因为onChange
这个名称同它的行为是不匹配的,React 依赖这个事件去实时控制用户的输入。
selected
<option>
component 支持selected
特性。你可以使用它去设置component 是否被选中。这对构建可控的component 是有用的。
style
stye
特性接受一个camelCased 的JavaScript 对象而不是一个CSS 字符串。这同DOM 的style 这个JavaScript 属性是一致的,是更有效的,并且阻止了XSS 安全漏洞。例如:
1 | const divStryle = { |
注意到style 并不是自动加前缀的。为了支持老版本浏览器,你需要补充响应的浏览器style 属性:
1 | const divStyle = { |
Style keys 是camelCased 为了保持同JS 访问DOM 节点上的属性一致(例如,node.style.backgroundImage
)。厂商(vendor)前缀除了ms都应该是大写字母开头。这就是为什么WebkitTransition
是以W
开头。
suppressContentEditableWarning
通常,当自己点的element 被标记为contentEditable
时会有警告,因为它不会工作。这个特性就是为了阻止这个警告。不要使用它,除非你正在构建一个类似Draft.js 的库用来手动管理contentEditable
。
value
<input>
和<textarea>
component 支持value
特性。你可以用它设置component 的value。这对构建可控的component 是有用的。 defaultValued
等同于不可控的,用来设置一个component 首次加载时的value。
All Supported HTML Attributes
React 支持所有的data-*
和aria-*
特性,还有下面这些特性:
1 | accept acceptCharset accessKey action allowFullScreen allowTransparency alt |
这些RDFa 特性是被支持的(几个同标准的HTML 特性重复的RDFa特性是排除在这个列表的):
1 | about datatype inlist prefix property resource typeof vocab |
除此之外,下面这些非标准的特性也是被支持的:
- Mobile Safari 中的
autoCapitalize autoCorrect
- Safari 中的为
<link ref="mask-icon" />
这种color
- HTML5 mircodata 中的
itemProp itemScope itemType itemRef itemID
- 老版本IE浏览器中的
security
- IE 浏览器中的
unselectable
- 对WebKit/Blink 中的
search
类型输入域中的results autoSave
All Supported SVG Attributes
React 支持这些SVG 特性:
1 | accentHeight accumulate additive alignmentBaseline allowReorder alphabetic |