В Реакте 16.2 улучшенная поддержка Fragments
была добавлена. Более подробную информацию можно найти в блоге React здесь.
Мы все знакомы со следующим кодом:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Да, нам нужен контейнерный div, но это не так уж важно.
В Реакте 16.2 мы можем сделать это, чтобы избежать окружающего контейнера div:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
В любом случае нам все еще нужен контейнерный элемент, окружающий внутренние элементы.
Мой вопрос, почему использование Fragment
предпочтительнее? Это помогает с производительностью? Если так, то почему? Хотелось бы немного понимания.
div
том, что вам не всегда нужен элемент-обертка. Элементы обертки имеют значение, и обычно для удаления этого значения требуются дополнительные стили.<Fragment>
это просто синтаксический сахар, который не отображается. Существуют ситуации, когда создание оболочки очень сложно, например, в SVG, где<div>
его нельзя использовать, и<group>
это не всегда то, что вам нужно.Ответы:
div
s в середине затрудняет сохранение желаемого макета при извлечении логических компонентов.Вы можете найти описания некоторых других вариантов использования в этой проблеме React: добавить фрагмент API, чтобы разрешить возврат нескольких компонентов из рендера
источник
<dt><dd>
становится намного проще. Возвращение парных элементов было неудобно раньшеFragments
.import Fragment from 'react'
. Но это не определено в RN.number 2
таблицы были для нас самой большой проблемой. Необходимая структураtable>tr>td
(возможно, сthead
и аналогичные) сделаны для некоторого неудобного кода React.import {Fragment} from 'react'
? это именной экспорт.Добавление всех ответов выше есть еще одно преимущества: читабельность кода ,
Fragment
компонент поддерживает синтаксическую форму сахара,<>
. Таким образом, код в вашем вопросе может быть написан легче как:Согласно документам ,
Без помех, верно?
Обратите внимание, что вам все еще нужно использовать
<Fragment>
синтаксис, если вам нужно предоставитьkey
фрагмент.источник
<Fragment>
Это так же просто, как когда вам не нужен элемент-обертка, вы не обязаны его использовать. Хорошо иметь меньше элементов, но я думаю, что наибольшим преимуществом является возможность отображать элементы в jsx, которые раньше были невозможны, и добавление лучшего семантического значения к элементам-оберткам, потому что они теперь являются необязательными.
Это было невозможно раньше:
Взглянув на следующее в React 15, вы не сможете определить, нужен ли элемент-обертка:
источник
В соответствии с документом activjs.org наиболее важными потребностями,
<Fragment> </Fragment>
а не div, являются недопущение нарушения семантики HTML. Когда мы используем div вместо<Fragment> </Fragment>
мы нарушаем семантику HTML.Чтобы узнать больше о семантике HTML. пожалуйста, нажмите, а также в некоторых случаях, если вы используете div вместо Fragments, это будет недействительным HTML, например, посмотрите на этот код:
Фрагменты решают эту проблему.
источник
<React.Fragment>...</React.Fragment>
, мы можем добавить родительский тег к нашим элементам JSX без добавления дополнительного узла в DOM.<>...</>.
источник