Co robi ...
ten kod React (używając JSX) i jak się nazywa?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Thomas Johansen
źródło
źródło
...
operator zachowuje się inaczej w różnych kontekstach. W tym kontekście jest to operator „rozprzestrzeniania” opisany poniżej przez @TJ Crowder. W innym kontekście może to być również operator „odpoczynku” opisany poniżej przez @Tomas Nikodym.Odpowiedzi:
To jest notacja rozprzestrzeniania się własności . Został dodany w ES2018 (spread dla tablic / iterable był wcześniejszy, ES2015), ale przez długi czas był obsługiwany w projektach React poprzez transpilację (jako „ atrybuty rozprzestrzeniania JSX ”, nawet jeśli można to zrobić również w innym miejscu, nie tylko atrybuty ).
{...this.props}
rozkłada „własne” wyliczalne właściwościprops
jako osobne właściwości naModal
tworzonym elemencie. Na przykład, jeżelithis.props
zawartea: 1
ib: 2
, a następniebyłby taki sam jak
Ale jest dynamiczny, więc wszystkie „własne” właściwości
props
są uwzględnione.Ponieważ
children
jest to własność „własna” wprops
, spread obejmie ją. Więc jeśli komponent, w którym to się pojawia, zawiera elementy potomne, zostaną one przekazane doModal
. Umieszczanie elementów potomnych między tagiem otwierającym a tagami zamykającymi to po prostu cukier składniowy - dobry rodzaj - do umieszczaniachildren
właściwości w tagu otwierającym. Przykład:Pokaż fragment kodu
Notacja rozproszona jest przydatna nie tylko w tym przypadku użycia, ale także do tworzenia nowego obiektu z większością (lub wszystkimi) właściwościami istniejącego obiektu - co pojawia się często podczas aktualizacji stanu, ponieważ nie można go zmodyfikować bezpośrednio:
Zastępuje
this.state.foo
go nowy obiekt o tych samych właściwościach,foo
z wyjątkiema
właściwości, która staje się"updated"
:Pokaż fragment kodu
źródło
children
własność lub są one połączone?children
. Eksperymenty mówią mi, że dzieci, które podajesz za pomocą wywoływanego atrybutu,children
są zastępowane przez te, które określasz między znacznikami początkowym i końcowym, ale jeśli jest to niezdefiniowane zachowanie, na pewno nie będę na nim polegać.Jak wiesz,
...
nazywa się je Atrybutami Rozprzestrzeniania, których nazwa reprezentuje, umożliwia rozszerzenie wyrażenia.I w tym przypadku (zamierzam to uprościć).
To:
jest równe
Krótko mówiąc, możemy powiedzieć , że jest to fajny skrót .
źródło
Trzy kropki reprezentują operatora Spread w ES6. Pozwala nam to zrobić kilka rzeczy w Javascript:
Połącz tablice
Niszczenie tablicy
Łączenie dwóch obiektów
Istnieją trzy zastosowania trzech kropek, które są znane jako parametry spoczynkowe i umożliwiają przeniesienie wszystkich argumentów do funkcji jako jednej tablicy.
Argumenty funkcji jako tablica
źródło
Trzy kropki w JavaScript to operator rozłożenia / spoczynku .
Operator rozsiewu
Składnia spread pozwala wyrazem zostać rozszerzona w miejscach, gdzie są oczekiwane wiele argumentów.
Parametry odpoczynku
Reszta składnia parametr jest używany dla funkcji o zmiennej liczbie argumentów.
Operator rozkładania / odpoczynku dla tablic został wprowadzony w ES6. Istnieje propozycja stanu 2 dla właściwości rozkładania / odpoczynku obiektów.
TypeScript obsługuje również składnię stron widzących i może przenosić ją do starszych wersji ECMAScript z drobnymi problemami .
źródło
Jest to funkcja ES6, która jest również używana w React. Spójrz na poniższy przykład:
Ten sposób jest w porządku, jeśli mamy maksymalnie 3 parametry. Ale co, jeśli musimy dodać na przykład 110 parametrów. Czy powinniśmy zdefiniować je wszystkie i dodawać je jeden po drugim?
Oczywiście istnieje łatwiejszy sposób, który nazywa się SPREAD . Zamiast przekazać wszystkie te parametry, które piszesz:
Nie mamy pojęcia, ile mamy parametrów, ale wiemy, że jest ich mnóstwo. W oparciu o ES6 możemy przepisać powyższą funkcję jak poniżej i użyć rozkładania i mapowania między nimi, aby było to tak proste jak bułka z masłem:
źródło
Po prostu definiuje rekwizyty w inny sposób w JSX dla Ciebie!
Używa
...
operatora tablic i obiektów w ES6 (obiekt nie jest jeszcze w pełni obsługiwany), więc w zasadzie, jeśli już zdefiniowałeś swoje rekwizyty, możesz w ten sposób przekazać je swojemu elementowi.W twoim przypadku kod powinien wyglądać mniej więcej tak:
więc rekwizyty, które zdefiniowałeś, są teraz rozdzielone i mogą być ponownie użyte w razie potrzeby.
Jest to równe:
Oto cytaty z zespołu React dotyczące operatora spreadów w JSX:
źródło
Dla tych, którzy pochodzą ze świata Python, atrybuty rozprzestrzeniania JSX są równoważne z rozpakowaniem list argumentów (
**
operator Python ).Wiem, że jest to pytanie JSX, ale praca z analogiami czasami pomaga uzyskać je szybciej.
źródło
...
(Operator spread) stosuje się w reakcji z:zapewniają dobry sposób przekazywania rekwizytów z komponentów nadrzędnych do podrzędnych. np. biorąc pod uwagę te rekwizyty w komponencie macierzystym,
można je przekazać dziecku w następujący sposób,
który jest podobny do tego
ale o wiele czystsze.
źródło
Trzy kropki
...
oznaczają operatory rozprzestrzeniania lub parametry spoczynkowe ,Pozwala rozszerzyć wyrażenie lub ciąg tablicowy lub cokolwiek, co może być iteracją, w miejscach, w których oczekiwane jest zero lub więcej argumentów dla wywołań funkcji lub elementów tablicy.
Zauważ, że
foo
właściwość obj1 została nadpisana przezfoo
właściwość obj2Uwaga: Składnia spreadu (inna niż w przypadku właściwości spreadu) może być zastosowana tylko do obiektów iterowalnych: więc następujące błędy spowodują błąd
Odniesienie 1
Odniesienie 2
źródło
Uznanie dla Brandona Morelli. Wyjaśnił tutaj doskonale , ale linki mogą umrzeć, więc wklejam tylko poniższe treści:
Składnia spreadu składa się z trzech kropek:
...
pozwala iterowalnym rozwinąć się w miejscach, w których spodziewane są argumenty 0+. Definicje są trudne bez kontekstu. Przeanalizujmy kilka różnych przypadków użycia, aby zrozumieć, co to oznacza.Przykład # 1 - Wstawianie tablic Spójrz na poniższy kod. W tym kodzie nie używamy składni spreadu:
Powyżej stworzyliśmy tablicę o nazwie
mid
. Następnie tworzymy drugą tablicę, która zawiera nasząmid
tablicę. Na koniec wylogowujemy wynik. Czego oczekujeszarr
do wydrukowania? Kliknij Uruchom powyżej, aby zobaczyć, co się stanie. Oto wynik:Czy tego oczekiwałeś? Wstawiając
mid
tablicę doarr
tablicy, otrzymaliśmy tablicę w tablicy. W porządku, jeśli to był cel. Ale co, jeśli chcesz tylko jedną tablicę o wartościach od 1 do 6? Aby to osiągnąć, możemy użyć składni spreadu! Pamiętaj, że składnia spreadu pozwala na rozszerzenie elementów naszej tablicy. Spójrzmy na poniższy kod. Wszystko jest takie samo - z wyjątkiem tego, że teraz używamy składni spreadu do wstawieniamid
tablicy doarr
tablicy:A kiedy naciśniesz przycisk uruchamiania, oto wynik:
Niesamowite! Pamiętasz definicję składni spreadu, którą właśnie przeczytałeś powyżej? Oto, gdzie wchodzi w grę. Jak widać, kiedy tworzymy
arr
tablicę i używamy operatora rozkładania namid
tablicy, zamiast po prostu wstawiać,mid
tablica się rozwija. To rozszerzenie oznacza, że każdy element wmid
tablicy jest wstawiany doarr
tablicy. Zamiast zagnieżdżonych tablic wynikiem jest pojedyncza tablica liczb od 1 do 6.Przykład 2 - Matematyka JavaScript ma wbudowany obiekt matematyczny, który pozwala nam wykonywać zabawne obliczenia matematyczne. W tym przykładzie przyjrzymy się
Math.max()
. Jeśli nie jesteś zaznajomiony,Math.max()
zwraca największą z zer lub więcej liczb. Oto kilka przykładów:Jak widać, jeśli chcesz znaleźć maksymalną wartość wielu liczb,
Math.max()
wymaga wielu parametrów. Niestety nie możesz po prostu użyć jednej tablicy jako danych wejściowych. Przed składnią rozprzestrzeniania najłatwiejszym sposobem na użycieMath.max()
tablicy jest użycie.apply()
To działa, to po prostu bardzo denerwujące. Teraz spójrz, jak robimy to samo dokładnie ze składnią rozprzestrzeniania:
Zamiast tworzyć funkcję i używać metody Apply do zwrócenia wyniku
Math.max()
, potrzebujemy tylko dwóch linii kodu! Składnia rozprzestrzeniania rozszerza nasze elementy tablicy i wprowadza każdy element z naszej tablicy indywidualnie doMath.max()
metody!Przykład 3 - Kopiowanie tablicy W JavaScript nie można po prostu skopiować tablicy, ustawiając nową zmienną równą już istniejącej tablicy. Rozważ następujący przykład kodu:
Po naciśnięciu przycisku Uruchom otrzymasz następujące dane wyjściowe:
Teraz na pierwszy rzut oka wygląda na to, że zadziałało - wygląda na to, że skopiowaliśmy wartości arr do arr2. Ale tak się nie stało. Widzisz, podczas pracy z obiektami w javascript (tablice są rodzajem obiektu) przypisujemy je przez odwołanie, a nie wartość. Oznacza to, że arr2 został przypisany do tego samego odwołania, co arr. Innymi słowy, wszystko, co zrobimy dla arr2, wpłynie również na oryginalną tablicę arr (i odwrotnie). Spójrz poniżej:
Powyżej umieściliśmy nowy element d w arr2. Kiedy jednak wylogujemy się z wartości arr, zobaczysz, że wartość d została również dodana do tej tablicy:
Nie musisz się jednak bać! Możemy użyć operatora rozrzutu! Rozważ poniższy kod. To prawie tak samo jak powyżej. Zamiast tego użyliśmy operatora rozkładania w parze nawiasów kwadratowych:
Naciśnij Uruchom, a zobaczysz oczekiwany wynik:
Powyżej wartości tablicy w arr zostały rozszerzone, aby stać się pojedynczymi elementami, które następnie zostały przypisane do arr2. Możemy teraz zmienić tablicę arr2 tak, jak byśmy tego chcieli, bez konsekwencji dla oryginalnej tablicy arr:
Ponownie powodem tego jest to, że wartość arr jest rozszerzana, aby wypełnić nawiasy naszej definicji tablicy arr2. Tak więc ustawiamy arr2, aby zrównywał poszczególne wartości arr zamiast odwołania do arr, tak jak to zrobiliśmy w pierwszym przykładzie.
Przykład bonusu - ciąg znaków do tablicy Jako zabawny ostatni przykład, możesz użyć składni spreadu do konwersji ciągu znaków na tablicę. Po prostu użyj składni spreadu w parze nawiasów kwadratowych:
źródło
Trzy kropki
(...)
nazywane są operatorem rozprzestrzeniania, i jest to koncepcyjnie podobne do operatora rozprzestrzeniania macierzy ES6, JSX wykorzystuje te obsługiwane i opracowuje standardy, aby zapewnić czystszą składnię w JSXOdniesienie:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
źródło
Znaczenie ... zależy od tego, gdzie używasz go w kodzie,
źródło
To operator rozprzestrzeniania ...
Na przykład, jeśli masz tablicę
first=[1,2,3,4,5]
i innąsecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
To samo można również zrobić z obiektami Json.
źródło
W skrócie, trzy kropki
...
to operator rozrzutu w ES6 (ES2015). Operator spreadu pobierze wszystkie dane.Daje wynik [1,2,3,4,5,6]
Daje wynik [7,8,1,2,3,4]
źródło
Zwykle nazywany jest operatorem rozprzestrzeniania, służy do rozszerzania wszędzie tam, gdzie jest to wymagane
przykład
możesz tego użyć wszędzie tam, gdzie jest to potrzebne, bardziej na temat operatora spreadu Składnia spreadu .
źródło
źródło
... ta składnia jest częścią ES6 i nie jest czymś, czego można używać tylko w React. Można jej używać na dwa różne sposoby; jako operator rozkładania LUB jako parametr spoczynkowy. Więcej informacji można znaleźć w tym artykule: https://www.techiediaries.com/react-spread-operator-props-setstate/
to, o czym wspomniałeś w pytaniu, jest coś takiego, załóżmy, że tak,
za pomocą operatora rozprzestrzeniania można przekazywać rekwizyty do komponentu w ten sposób.
źródło
Powszechną praktyką jest przekazywanie rekwizytów w aplikacji React. Robiąc to, jesteśmy w stanie zastosować zmiany stanu do elementu potomnego, niezależnie od tego, czy jest on czysty, czy nieczysty (bezstanowy lub stanowy). Są chwile, kiedy najlepszym podejściem, gdy podaje się rekwizyty, jest przejście właściwości pojedynczych lub całego obiektu właściwości. Dzięki obsłudze tablic w ES6 otrzymaliśmy notację „...” i dzięki temu jesteśmy w stanie osiągnąć przekazanie całego obiektu dziecku.
Typowy proces przekazywania rekwizytów dziecku jest odnotowany za pomocą następującej składni:
Jest to przydatne, gdy liczba rekwizytów jest minimalna, ale staje się niemożliwa do zarządzania, gdy liczba rekwizytów jest zbyt duża. Problem z tą metodą występuje, gdy nie znasz właściwości wymaganych w komponencie potomnym, a typową metodą JavaScript jest proste ustawienie tych właściwości i późniejsze powiązanie z obiektem. Powoduje to problemy z sprawdzaniem propType i błędami śledzenia stosu kryptycznego, które nie są pomocne i powodują opóźnienia w debugowaniu. Oto przykład tej praktyki i tego, czego nie należy robić:
Ten sam wynik można osiągnąć, ale z bardziej odpowiednim sukcesem, wykonując następujące czynności:
Ale nie używa spreadu JSX ani JSX, więc aby zapętlić to z powrotem do równania, możemy teraz zrobić coś takiego:
Właściwości zawarte w „... rekwizytach” to foo: x, bar: y. Można to połączyć z innymi atrybutami, aby zastąpić właściwości „... rekwizytów” przy użyciu tej składni:
Ponadto możemy skopiować na siebie inne obiekty własności lub połączyć je w ten sposób:
Lub scal dwa różne obiekty takie jak ten (nie jest to jeszcze dostępne we wszystkich wersjach reagujących):
Innym sposobem na wyjaśnienie tego, zgodnie z witryną React / Docs na Facebooku, jest:
Jeśli masz już „rekwizyty” jako obiekt i chcesz przekazać go w JSX, możesz użyć „...” jako operatora SPREAD, aby przekazać cały obiekt rekwizytów. Poniższe dwa przykłady są równoważne:
Atrybuty rozkładania mogą być przydatne podczas budowania ogólnych kontenerów. Mogą jednak również powodować bałagan w kodzie, ułatwiając przekazywanie wielu nieistotnych rekwizytów do komponentów, które nie dbają o nie. Tej składni należy używać oszczędnie.
źródło
Nazywa się to operatorem spreadu. Na przykład let hello = {name: '', msg: ''} let hello1 = {... hello} Teraz właściwości obiektu hello są kopiowane do hello1.
źródło
Nazywa się to składnią spreadów w javascript.
Służy do niszczenia tablicy lub obiektu w javascript.
przykład:
Możesz zrobić to samo z
Object.assign()
funkcją w javascript.Odniesienie: Składnia spreadu
źródło
Zostanie to skompilowane w:
gdzie daje więcej dwóch właściwości
title
ianimation
więcej niżprops
element hosta ma....
to operator ES6 o nazwie Spread .Zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
źródło
operator rozprzestrzeniania (potrójny) wprowadza w skrypcie ecama 6 (ES6). Skrypt Eama (ES6) jest opakowaniem javascript.
rozłóż operatorowi wyliczalne właściwości w rekwizytach. this.props = {firstName: „Dan”, lastName: „Abramov”, miasto: „New York”, kraj: „USA”}
Ale główny typ operatora rozprzestrzeniania jest używany jako typ odniesienia.
Nazywa się to typem odniesienia, jeden obiekt wpływa na inne obiekty, ponieważ można je współużytkować w pamięci. Jeśli otrzymujesz wartość niezależnie oznacza pamięć rozproszenia, obaj używaj operatora rozkładania.
źródło
jeśli masz tablicę elementów i chcesz wyświetlić elementy, których po prostu używasz ... macierze tablicowe i będzie iterować po wszystkich elementach
źródło
...
(trzy kropki w Javascript) nazywa się Spread Syntax lub Spread Operator. Umożliwia to rozwinięcie iterowalnego wyrażenia lub ciągu tablicowego lub rozwinięcie wyrażenia obiektowego w dowolnym miejscu. Nie dotyczy to React. Jest to operator Javascript.Wszystkie te odpowiedzi tutaj są pomocne, ale chcę wymienić najczęściej używane praktyczne przypadki użycia składni spreadu (operator spreadu).
1. Połącz tablice (tablice konkatenacji)
Istnieje wiele sposobów łączenia tablic , ale operator rozkładania pozwala na umieszczenie tego w dowolnym miejscu w tablicy. Jeśli chcesz połączyć dwie tablice i umieścić elementy w dowolnym punkcie tablicy, możesz wykonać następujące czynności:
2. Kopiowanie tablic
Gdy potrzebowaliśmy kopii tablicy, mieliśmy metodę Array.prototypr.slice () . Ale możesz zrobić to samo z operatorem rozprzestrzeniania.
3. Wywołanie funkcji bez zastosowania
W ES5, aby przekazać tablicę dwóch liczb do
doStuff()
funkcji, często używasz metody Function.prototype.apply () w następujący sposób:Jednak za pomocą operatora rozkładania można przekazać tablicę do funkcji.
4. Tablice destrukcyjne
Możesz użyć restrukturyzacji i operatora reszty razem, aby wyodrębnić informacje do zmiennych, tak jak chcesz:
5. Argumenty funkcji jako parametry spoczynkowe
ES6 ma również trzy kropki (...), które są parametrem rest, który gromadzi wszystkie pozostałe argumenty funkcji w tablicy.
6. Korzystanie z funkcji matematycznych
Każda funkcja, w której jako argument używany jest rozkład, może być używana przez funkcje, które mogą przyjmować dowolną liczbę argumentów.
7. Łączenie dwóch obiektów
Za pomocą operatora rozkładania można łączyć dwa obiekty. Jest to łatwy i czystszy sposób na zrobienie tego.
8. Rozdziel ciąg znaków na osobne znaki
Za pomocą operatora rozkładania możesz rozłożyć ciąg znaków na osobne znaki.
Możesz wymyślić więcej sposobów korzystania z operatora Spread. Wymieniłem tutaj popularne przypadki użycia.
źródło
To nowa funkcja w ES6 / Harmony. Nazywa się to Operatorem Spreadu. Pozwala albo oddzielić części składowe tablicy / obiektu, albo wziąć wiele elementów / parametrów i skleić je ze sobą. Oto przykład:
I z przedmiotem / kluczami:
Naprawdę fajne jest to, że możesz użyć go do oznaczenia „reszty wartości”.
źródło
Są to tak zwane spready. Tak jak sama nazwa wskazuje. Oznacza to, że umieszcza dowolną jego wartość w tych tablicach lub obiektach.
Jak na przykład :
źródło