createElement¶
Функция createElement
позволяет создать элемент React. Он служит альтернативой написанию JSX.
1 |
|
Описание¶
createElement(type, props, ...children)
¶
Вызывает createElement
для создания элемента React с заданными type
, props
и children
.
1 2 3 4 5 6 7 8 9 |
|
Параметры¶
type
: Аргументtype
должен быть допустимым типом компонента React. Например, это может быть строка имени тега (например,'div'
или'span'
) или компонент React (функция, класс или специальный компонент типаFragment
).props
: Аргументprops
должен быть либо объектом, либоnull
. Если вы передадитеnull
, он будет рассматриваться так же, как пустой объект. React создаст элемент с пропсами, соответствующими переданным вамиprops
. Обратите внимание, чтоref
иkey
из вашего объектаprops
являются специальными и не будут доступны какelement.props.ref
иelement.props.key
в возвращаемомelement
. Они будут доступны какelement.ref
иelement.key
.- опционально
...children
: Ноль или более дочерних узлов. Это могут быть любые узлы React, включая элементы React, строки, числа, порталы, пустые узлы (null
,undefined
,true
иfalse
) и массивы узлов React.
Возвращаемое значение¶
createElement
возвращает объект элемента React с несколькими свойствами:
type
:тип
, который вы передали.props
: Всеprops
, которые вы передали, за исключениемref
иkey
. Еслиtype
является компонентом с унаследованнымtype.defaultProps
, то все отсутствующие или неопределенныеprops
получат значения изtype.defaultProps
.ref
: Переданный вамиref
. Если отсутствует, тоnull
.key
: Переданный вамиkey
, принудительно преобразованный в строку. Если отсутствует, тоnull
.
Обычно вы возвращаете элемент из своего компонента или делаете его дочерним элементом другого элемента. Хотя вы можете читать свойства элемента, лучше всего рассматривать каждый элемент как непрозрачный после его создания и только отображать его.
Предостережения¶
- Вы должны обращаться с элементами React и их пропсами как с неизменяемыми и никогда не изменять их содержимое после создания. В процессе разработки React будет замораживать возвращаемый элемент и его свойство
props
неглубоко, чтобы обеспечить это. - Когда вы используете JSX, вы должны начинать тег с заглавной буквы для рендеринга вашего собственного компонента. Другими словами,
<Something />
эквивалентноcreateElement(Something)
, но<something />
(в нижнем регистре) эквивалентноcreateElement('something')
(обратите внимание, что это строка, поэтому она будет рассматриваться как встроенный HTML тег). - Вы должны передавать дочерние элементы в качестве нескольких аргументов в
createElement
, только если они все статически известны, например,createElement('h1', {}, child1, child2, child3)
. Если дочерние элементы динамические, передайте весь массив в качестве третьего аргумента:createElement('ul', {}, listItems)
. Это гарантирует, что React будет предупреждать вас об отсутствииключей
для любых динамических списков. Для статических списков это не нужно, потому что они никогда не меняют порядок.
Использование¶
Создание элемента без JSX¶
Если вам не нравится JSX или вы не можете использовать его в своем проекте, вы можете использовать createElement
в качестве альтернативы.
Чтобы создать элемент без JSX, вызовите createElement
с некоторыми type, props и children:
```js [[1, 5, "'h1'"], [2, 6, "{ className: 'greeting' }"], [3, 7, "'Hello ',"], [3, 8, "createElement('i', null, name),"], [3, 9, "'. Welcome!'"]] import { createElement } from 'react';
function Greeting({ name }) { return createElement( 'h1', { className: 'greeting' }, 'Hello ', createElement('i', null, name), '. Welcome!' ); }
1 2 3 4 5 6 7 8 9 10 |
|
Чтобы вывести собственный компонент React, передайте функцию типа Greeting
в качестве type вместо строки типа 'h1'
:
1 2 3 |
|
В JSX это будет выглядеть следующим образом:
1 2 3 |
|
Вот полный пример, написанный с помощью createElement
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
А вот тот же пример, написанный с использованием JSX:
1 2 3 4 5 6 7 8 9 10 11 |
|
Оба стиля кодирования подходят, поэтому для своего проекта вы можете использовать тот, который вам больше нравится. Основное преимущество использования JSX по сравнению с createElement
заключается в том, что легко увидеть, какой закрывающий тег соответствует какому открывающему тегу.
Что такое React-элемент?
Элемент - это легкое описание части пользовательского интерфейса. Например, и <Greeting name="Taylor" />
, и createElement(Greeting, { name: 'Taylor' })
создают объект, подобный этому:
1 2 3 4 5 6 7 8 9 |
|
Обратите внимание, что при создании этого объекта компонент Greeting
не отрисовывается и не создается никаких элементов DOM..
Элемент React больше похож на описание - инструкцию для React по последующему рендерингу компонента Greeting
. Возвращая этот объект из компонента App
, вы указываете React, что делать дальше.
Создание элементов чрезвычайно дешево, поэтому вам не нужно пытаться оптимизировать или избегать этого.