Когда использовать React.Fragments?
Я только что узнал о React Fragments.
Я понимаю, что фрагменты немного более эффективны за счет создания меньшего количества узлов дерева и делают его чище при взгляде на инспектор, но тогда зачем нам когда-либо использовать его в качестве контейнеров в компонентах React? Должны ли мы всегда использовать React.Fragments в наших компонентах?
Будет ли использование фрагментов усложнять стилизацию? (Я не уверен, поскольку я еще не попробовал это непосредственно).
3 ответа
В большинстве распространенных практик React позволяет отображать только один элемент <>. Если вы хотите визуализировать несколько элементов, вы можете окружить их <div></div>
или же <span></span>
,
Пример ситуации с фрагментами. Одним из наиболее важных применений фрагментов является <tbody>
тег (как указано в примере фрагмента официального сайта), в ситуации, когда вы хотите сделать несколько <tr/>
строки в элементе, вы можете обнаружить, что их нельзя обернуть <div>
, так как внутри тега вы можете иметь только <tr/>
элемент!
Что ж, в другой ситуации я рекомендую всегда использовать одноэлементный рендер, если это не нужно.
Вы можете использовать
React.fragments
когда тебе нужен реквизит, например,
<React.fragments key={1}><\React.fragments>
. Если вам не нужны реквизиты, вы можете использовать
<> <\>
.
С использованием
<></>
это просто плохая практика ИМО.
Я рекомендую использовать только
<div></div>
когда вам требуется , чтобы дети были помещены внутри родительского элемента. В противном случае это бессмысленный/лишний html, который просто не требуется.
Например, у нас есть имя класса, связанное с элементом Div.
<body>
<div classname="people-group-1">
<h1>Hello Shippers</h1>
<h1>Hello Matey</h1>
<h1>Hello Pal</h1>
</div>
<div classname="people-group-2">
<h1>Hello Mucka</h1>
<h1>Hello Geeza</h1>
<h1>Hello Dude</h1>
</div>
</body>
Я не рекомендую использовать следующий пример, поскольку элементы Div не служат никакой цели, кроме удобства чтения.
<body>
<div>
<h1>Hello Shippers</h1>
<h1>Hello Matey</h1>
<h1>Hello Pal</h1>
</div>
<div>
<h1>Hello Mucka</h1>
<h1>Hello Geeza</h1>
<h1>Hello Dude</h1>
</div>
</body>
<!-- No different to--->
<body>
<h1>Hello Shippers</h1>
<h1>Hello Matey</h1>
<h1>Hello Pal</h1>
<h1>Hello Mucka</h1>
<h1>Hello Geeza</h1>
<h1>Hello Dude</h1>
</body>
Если вам нужно вернуть несколько элементов, которым не нужен родитель, вы можете использовать этот подход.
import React, { Fragment } from 'react'
const names = ['Shippers', 'Matey', 'Pal', 'Mucka', 'Geeza', 'Dude']
export const Headers = () => (
<Fragment>{names.map(name => <h1>{`Hello ${name}`}</h1>)}</Fragment>
)
Затем вы можете импортировать его в рендерер где угодно.
import React from 'react'
import { Headers } from './Headers'
export const Body = () (
<body>
<Headers />
</body>
)
Это транспилируется в
<body>
<h1>Hello Shippers</h1>
<h1>Hello Matey</h1>
<h1>Hello Pal</h1>
<h1>Hello Mucka</h1>
<h1>Hello Geeza</h1>
<h1>Hello Dude</h1>
</body>