W Reakcie 16.2 Fragments
dodano ulepszone wsparcie dla . Więcej informacji można znaleźć w poście na blogu Reacta tutaj.
Wszyscy znamy następujący kod:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Tak, potrzebujemy kontenera div, ale to nic wielkiego.
W Reakcie 16.2 możemy to zrobić, aby uniknąć otaczającego kontenera div:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
W obu przypadkach nadal potrzebujemy elementu kontenera otaczającego elementy wewnętrzne.
Moje pytanie brzmi: dlaczego używa się Fragment
preferowanego? Czy to pomaga w wydajności? Jeśli tak, dlaczego? Chciałbym trochę wglądu.
div
polega na tym, że nie zawsze chcesz mieć element opakowujący. Elementy opakowania mają znaczenie i zwykle potrzebujesz dodatkowych stylów, aby to znaczenie zostało usunięte.<Fragment>
to tylko cukier syntaktyczny, który nie jest renderowany. Są sytuacje, w których tworzenie opakowania jest bardzo trudne, na przykład w SVG, gdzie<div>
nie można go użyć i<group>
nie zawsze jest to, czego chcesz.Odpowiedzi:
div
s w środku utrudnia zachowanie pożądanego układu podczas wyodrębniania komponentów logicznych.Opisy innych przypadków użycia można znaleźć w tym wydaniu React: Dodaj fragment API, aby umożliwić zwracanie wielu komponentów z renderowania
źródło
<dt><dd>
staje się dużo łatwiejsze. Wcześniej zwracanie sparowanych elementów było niewygodneFragments
.import Fragment from 'react'
. Ale to jest niezdefiniowane w RN.number 2
stoły były dla nas największym problemem. Potrzebna strukturatable>tr>td
(prawdopodobnie zthead
i podobna) została stworzona dla jakiegoś niezręcznego kodu React.import {Fragment} from 'react'
? to nazwany eksport.Dodając do wszystkich odpowiedzi powyżej jest jeszcze jedna zaleta: Kod czytelność ,
Fragment
podpory składnik a składniowym formą cukru<>
. W ten sposób kod w twoim pytaniu można łatwiej napisać jako:Zgodnie z docs ,
Bez bałaganu, prawda?
Zwróć uwagę, że nadal musisz używać
<Fragment>
składni, jeśli chcesz podaćkey
fragment.źródło
<Fragment>
To tak proste, jak gdy nie potrzebujesz elementu opakowującego, nie musisz go używać. Posiadanie mniejszej liczby elementów jest świetne, ale myślę, że największą zaletą jest możliwość renderowania elementów w jsx, które wcześniej nie były możliwe, i nadanie lepszego znaczenia semantycznego elementom opakowującym, ponieważ są one teraz opcjonalne.
Wcześniej nie było to możliwe:
Patrząc na poniższe w Reakcie 15, nie możesz stwierdzić, czy element opakowania jest potrzebny, czy nie:
źródło
Zgodnie z dokumentacją actjs.org, najważniejszymi potrzebami
<Fragment> </Fragment>
zamiast elementów div są unikanie łamania semantyki HTML. Kiedy używamy div zamiast<Fragment> </Fragment>
, łamiemy semantykę HTML.Aby dowiedzieć się więcej na temat semantyki HTML. proszę kliknąć, a są też przypadki, w których jeśli użyjesz div zamiast Fragments, będzie to nieprawidłowy html, na przykład spójrz na ten kod:
Fragmenty rozwiązują ten problem.
źródło
<React.Fragment>...</React.Fragment>
, możemy dodać tag nadrzędny do naszych elementów JSX bez dodawania dodatkowego węzła do DOM.<>...</>.
źródło