createFactory
Цей API буде видалено в наступному старшому релізі React. Дивіться альтернативи.
createFactory дозволяє створити функцію, яка створює React-елементи заданого типу.
const factory = createFactory(type)
Довідник
createFactory(type)
Виклик createFactory(type) для створення фабричної функції, яка створює React-елементи заданого типу .
import { createFactory } from 'react';
const button = createFactory('button');
Тоді ви зможете використовувати його для створення React-елементів без JSX:
export default function App() {
return button({
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}
Дивіться більше прикладів нижче.
Параметри
type: Аргументtypeповинен бути допустимим типом React-компонента. Наприклад, це може бути рядок імені тегу (наприклад,'div'або'span') або React-компонент (функція, клас або спеціальний компонент, якFragment).
Повернення
Повертає заводську функцію. Ця фабрична функція отримує об'єкт props як перший аргумент, за яким слідує список ...children аргументів, і повертає React-елемент із заданими type, props і children.
Використання
Створення React-елементів за допомогою фабрики
Хоча більшість проектів React використовують JSX для опису інтерфейсу користувача, JSX не є обов'язковим. Раніше createFactory був одним зі способів опису інтерфейсу користувача без JSX.
Викличте createFactory, щоб створити фабричну функцію для певного типу елемента, наприклад 'button':
import { createFactory } from 'react';
const button = createFactory('button');
Виклик цієї фабричної функції створить 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');
}
import { createElement } from 'react';
export function createFactory(type) {
return createElement.bind(null, type);
}
Це дозволить вам зберегти весь ваш код незмінним, окрім імпорту.
Заміна 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');
}
Повний приклад використання React без JSX:
import { createElement } from 'react';
export default function App() {
return createElement('button', {
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}
Замінено createFactory на JSX
Нарешті, ви можете використовувати JSX замість createFactory. Це найпоширеніший спосіб використання React:
export default function App() {
return (
<button onClick={() => {
alert('Clicked!');
}}>
Click me
</button>
);
};
Іноді ваш наявний код може передавати деяку змінну як тип замість константи типу 'button':
function Heading({ isSubheading, ...props }) {
const type = isSubheading ? 'h2' : 'h1';
const factory = createFactory(type);
return factory(props);
}
Щоб зробити те саме у JSX, вам потрібно перейменувати вашу змінну, щоб вона починалася з великої літери, наприклад Type:
function Heading({ isSubheading, ...props }) {
const Type = isSubheading ? 'h2' : 'h1';
return <Type {...props} />;
}
Інакше React інтерпретує <type> як вбудований HTML-тег, оскільки він записаний у нижньому регістрі.