| title | React DOM コンポーネント |
|---|
React は、ブラウザ組み込みのすべての HTML と SVG コンポーネントをサポートしています。
すべてのブラウザ組み込みコンポーネントは、いくつかの props とイベントをサポートしています。
これには、ref や dangerouslySetInnerHTML のような React 固有の props も含みます。
以下のブラウザ組み込みコンポーネントはユーザからの入力を受け付けます。
これらは React では特別です。なぜなら props として value を渡すと制御されたコンポーネントになるからです。
以下のブラウザ組み込みコンポーネントを用いて、外部リソースを読み込んだり、ドキュメントにメタデータを付与したりすることができます。
これらが React にとって特別なのは、React がこれらをドキュメントの head 要素に入れることができ、リソースのロード中にサスペンドができ、また個々のコンポーネントのリファレンスページで説明されているような特別な挙動が有効になるからです。
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>
DOM 標準と同様に、React では props の名前として camelCase 規則を使用します。例えば、tabindex ではなく tabIndex と書きます。既存の HTML を JSX に変換するためのオンラインコンバータを使用できます。
<<<<<<< HEAD
ダッシュを含むタグ、例えば <my-element> をレンダーする場合、React はカスタム HTML 要素をレンダーしていると想定します。React では、カスタム要素のレンダーは、組み込みのブラウザタグのレンダーとは異なる方法で行われます。
- すべてのカスタム要素の props は文字列にシリアライズされ、常に属性を使用して設定されます。
- カスタム要素は
classNameではなくclassを、htmlForではなくforを受け入れます。 ======= If you render a tag with a dash, like<my-element>, React will assume you want to render a custom HTML element.
27d86ffe6ec82e3642c6490d2187bae2271020a4
組み込みのブラウザ HTML 要素を is 属性を用いてレンダーする場合も、カスタム要素として扱われます。
Custom elements have two methods of passing data into them:
- Attributes: Which are displayed in markup and can only be set to string values
- Properties: Which are not displayed in markup and can be set to arbitrary JavaScript values
By default, React will pass values bound in JSX as attributes:
<my-element value="Hello, world!"></my-element>Non-string JavaScript values passed to custom elements will be serialized by default:
// Will be passed as `"1,2,3"` as the output of `[1,2,3].toString()`
<my-element value={[1,2,3]}></my-element>React will, however, recognize an custom element's property as one that it may pass arbitrary values to if the property name shows up on the class during construction:
import {MyElement} from './MyElement.js';
import { createRoot } from 'react-dom/client';
import {App} from "./App.js";
customElements.define('my-element', MyElement);
const root = createRoot(document.getElementById('root'))
root.render(<App />);export class MyElement extends HTMLElement {
constructor() {
super();
// The value here will be overwritten by React
// when initialized as an element
this.value = undefined;
}
connectedCallback() {
this.innerHTML = this.value.join(", ");
}
}export function App() {
return <my-element value={[1,2,3]}></my-element>
}A common pattern when using custom elements is that they may dispatch CustomEvents rather than accept a function to call when an event occur. You can listen for these events using an on prefix when binding to the event via JSX.
import {MyElement} from './MyElement.js';
import { createRoot } from 'react-dom/client';
import {App} from "./App.js";
customElements.define('my-element', MyElement);
const root = createRoot(document.getElementById('root'))
root.render(<App />);export class MyElement extends HTMLElement {
constructor() {
super();
this.test = undefined;
this.emitEvent = this._emitEvent.bind(this);
}
_emitEvent() {
const event = new CustomEvent('speak', {
detail: {
message: 'Hello, world!',
},
});
this.dispatchEvent(event);
}
connectedCallback() {
this.el = document.createElement('button');
this.el.innerText = 'Say hi';
this.el.addEventListener('click', this.emitEvent);
this.appendChild(this.el);
}
disconnectedCallback() {
this.el.removeEventListener('click', this.emitEvent);
}
}export function App() {
return (
<my-element
onspeak={e => console.log(e.detail.message)}
></my-element>
)
}<<<<<<< HEAD React の将来のバージョンでは、カスタム要素に対するより包括的なサポートが含まれます。
これは、最新の実験的 (experimental) バージョンに React パッケージをアップグレードすることで試すことができます。
react@experimentalreact-dom@experimental
Events are case-sensitive and support dashes (-). Preserve the casing of the event and include all dashes when listening for custom element's events:
// Listens for `say-hi` events
<my-element onsay-hi={console.log}></my-element>
// Listens for `sayHi` events
<my-element onsayHi={console.log}></my-element>---27d86ffe6ec82e3642c6490d2187bae2271020a4
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>
DOM 標準と同様に、React では props の名前として camelCase 規則を使用します。例えば、tabindex ではなく tabIndex と書きます。既存の SVG を JSX に変換するためのオンラインコンバータを使用できます。
名前空間付きの属性もコロンなしで書かなければなりません。
xlink:actuateはxlinkActuateになります。xlink:arcroleはxlinkArcroleになります。xlink:hrefはxlinkHrefになります。xlink:roleはxlinkRoleになります。xlink:showはxlinkShowになります。xlink:titleはxlinkTitleになります。xlink:typeはxlinkTypeになります。xml:baseはxmlBaseになります。xml:langはxmlLangになります。xml:spaceはxmlSpaceになります。xmlns:xlinkはxmlnsXlinkになります。