React DOM 组件
常见组件
所有内置的浏览器组件都支持一些 props 和事件。
这包括像 ref 和 dangerouslySetInnerHTML 这样的 React 特有 props。
表单组件
这些内置的浏览器组件接受用户输入:
它们在 React 中是特殊的,因为向它们传递 value prop 会使它们变为 受控。
资源和元数据组件
这些内置的浏览器组件让你可以加载外部资源,或用元数据标注文档:
它们在 React 中是特殊的,因为 React 可以将它们渲染到 document head 中,在资源加载时挂起,并执行各组件参考页中描述的其他行为。
所有 HTML 组件
React 支持所有内置的浏览器 HTML 组件。这包括:
<aside><audio><b><base><bdi><bdo><blockquote><body><br><button><canvas><caption><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><div><dl><dt><em><embed><fieldset><figcaption><figure><footer><form><h1><head><header><hgroup><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><menu><meta><meter><nav><noscript><object><ol><optgroup><option><output><p><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><slot><small><source><span><strong><style><sub><summary><sup><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><u><ul><var><video><wbr>
自定义 HTML 元素
如果你渲染一个带有连字符的标签,比如 <my-element>,React 会假定你想渲染一个 自定义 HTML 元素。
如果你渲染一个带有 is 属性的内置浏览器 HTML 元素,它也会被视为自定义元素。
在自定义元素上设置值
自定义元素有两种向其传递数据的方法:
- 属性:会显示在标记中,并且只能设置为字符串值
- 属性(properties):不会显示在标记中,并且可以设置为任意 JavaScript 值
默认情况下,React 会将 JSX 中绑定的值作为属性传递:
<my-element value="Hello, world!"></my-element>传递给自定义元素的非字符串 JavaScript 值默认会被序列化:
// 将作为 `"1,2,3"` 传递,等同于 `[1,2,3].toString()` 的输出
<my-element value={[1,2,3]}></my-element>不过,如果某个自定义元素的属性名在构造期间出现在类上,React 就会将其识别为可以向其传递任意值的属性:
export class MyElement extends HTMLElement { constructor() { super(); // 此处的值将被 React 覆盖 // 当其作为元素初始化时 this.value = undefined; } connectedCallback() { this.innerHTML = this.value.join(", "); } }
监听自定义元素上的事件
使用自定义元素时,一个常见模式是它们可能会派发 CustomEvents,而不是接受一个在事件发生时调用的函数。你可以在通过 JSX 绑定事件时使用 on 前缀来监听这些事件。
export function App() { return ( <my-element onspeak={e => console.log(e.detail.message)} ></my-element> ) }
所有 SVG 组件
React 支持所有内置的浏览器 SVG 组件。这包括:
<a><animate><animateMotion><animateTransform><circle><clipPath><defs><desc><discard><ellipse><feBlend><feColorMatrix><feComponentTransfer><feComposite><feConvolveMatrix><feDiffuseLighting><feDisplacementMap><feDistantLight><feDropShadow><feFlood><feFuncA><feFuncB><feFuncG><feFuncR><feGaussianBlur><feImage><feMerge><feMergeNode><feMorphology><feOffset><fePointLight><feSpecularLighting><feSpotLight><feTile><feTurbulence><filter><foreignObject><g><hatch><hatchpath><image><line><linearGradient><marker><mask><metadata><mpath><path><pattern><polygon><polyline><radialGradient><rect><script><set><stop><style><svg><switch><symbol><text><textPath><title><tspan><use><view>