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を使用せずにユーザーインターフェースを記述できる方法の1つでした。
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> ); };