React DOM 组件
通用组件
所有的浏览器内置组件都支持一些共同的属性与方法。
这些组件在 React 中可以使用 React 特有的属性,如 ref 与 dangerouslySetInnerHTML。
表单组件
这些浏览器内置组件接收用户的输入:
将 value 作为 prop 传递给这些组件会将其变为 受控组件。
资源和元数据组件
通过这些内置浏览器组件,您可以加载外部资源或为文档添加元数据注释:
它们在 React 中是特殊的,因为 React 可以将它们渲染到文档头部,在资源加载时暂停,并执行参考页面中针对每个特定组件描述的其他行为。
所有的 HTML 组件
React 支持所有浏览器内置的组件,包括:
- <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 元素,它也会被视为自定义元素。
在自定义元素上设置值
自定义元素有两种数据传递方法:
- Attributes:显示在标记中,只能设置为字符串值
- Properties:不在标记中显示,可设置为任意 JavaScript 值
默认情况下,React 会将 JSX 中绑定的值作为 attributes 传递:
<my-element value="Hello, world!"></my-element>默认情况下,传递给自定义元素的非字符串 JavaScript 值将被序列化:
// 将以 `[1,2,3].toString()` 的输出结果 `"1,2,3"` 的形式传递
<my-element value={[1,2,3]}></my-element>不过,如果自定义元素的属性名称在构建过程中出现在类上,React 就会将其识别为可以传递任意值的 arbitrary:
export class MyElement extends HTMLElement { constructor() { super(); // 初始化为元素时 // 此处的值将被 React 覆盖 this.value = undefined; } connectedCallback() { this.innerHTML = this.value.join(", "); } }
监听自定义元素上的事件
使用自定义元素时的一个常见模式是,它们可能会派发 自定义事件,而不是在事件发生时接受函数调用。在通过 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>