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> ); };