createFactory
createFactory は、指定したタイプの React 要素を生成するための関数を作成します。
const factory = createFactory(type)リファレンス
createFactory(type)
createFactory(type) を呼び出して、指定した type の React 要素を生成するためのファクトリ関数を作成します。
import { createFactory } from 'react';
const button = createFactory('button');この後、JSX を使わずに React 要素を作成することができます。
export default function App() {
return button({
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}引数
type:type引数は有効な React のコンポーネントタイプでなければなりません。例えば、タグ名の文字列('div'や'span')や、React コンポーネント(関数、クラス、またはFragmentのような特別なコンポーネント)が該当します。
返り値
ファクトリ関数を返します。そのファクトリ関数は、最初の引数として props オブジェクトを受け取り、その後に ...children 引数のリストを受け取り、指定した type、props、children を持った React 要素を返します。
使用法
ファクトリ関数を使って React 要素を作成する
ほとんどの React プロジェクトではユーザインターフェースを記述するために JSX を使用していますが、JSX は必須ではありません。過去には createFactory が、JSX を使わずにユーザインターフェースを記述するための方法のひとつでした。
createFactory を呼び出して、'button' のような特定の要素タイプのファクトリ関数を作成します。
import { createFactory } from 'react';
const button = createFactory('button');そのファクトリ関数を呼び出すと、指定した props と children を持つ React 要素が生成されます。
import { createFactory } from 'react'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); }
このようにして createFactory が JSX の代替として使用されていました。しかし、createFactory は非推奨であり、新しいコードでは createFactory を呼び出すべきではありません。createFactory から移行する方法については下記をご覧ください。
代替手段
createFactory をプロジェクトにコピーする
プロジェクト内で多くの createFactory 呼び出しがある場合は、この createFactory.js の実装をプロジェクトにコピーします:
import { createFactory } from './createFactory.js'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); }
これにより、インポートを除くすべてのコードを変更せずに保持できます。
createFactory を createElement に置き換える
少数の createFactory の呼び出しがあり手動で移植しても構わず、かつ JSX を使用したくない、という場合、ファクトリ関数のすべての呼び出しを createElement の呼び出しに置き換えることができます。例えば以下のコードは:
import { createFactory } from 'react';
const button = createFactory('button');
export default function App() {
return button({
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}以下のコードに置き換えが可能です:
import { createElement } from 'react';
export default function App() {
return createElement('button', {
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}以下は、JSX を使用せずに React を使用する完全な例です。
import { createElement } from 'react'; export default function App() { return createElement('button', { onClick: () => { alert('Clicked!') } }, 'Click me'); }
export default function App() { return ( <button onClick={() => { alert('Clicked!'); }}> Click me </button> ); };