Przepraszam, zdałem sobie sprawę, że moja pierwsza odpowiedź (miejmy nadzieję, że nadal dostarcza użytecznego / dodatkowego kontekstu) nie odpowiada na twoje pytanie. Pozwól mi spróbować jeszcze raz.
Ty pytasz:
Chcę być tego pewien { component: Component, ...rest }
oznacza to:
Od props
, weź właściwość, Component
a następnie wszystkie inne props
dane, i zmień nazwę props
na, rest
aby uniknąć problemów z nazewnictwem z
props
przekazaną do render
funkcji Route
Twoja interpretacja nie jest całkiem poprawna. Opierając się jednak na twoich przemyśleniach, wydaje się, że przynajmniej jesteś świadomy faktu, że to, co się tutaj dzieje, sprowadza się do pewnego rodzaju destrukcji obiektu (więcej wyjaśnień znajdziesz w drugiej odpowiedzi i komentarzach).
Aby dać dokładne wyjaśnienie, podzielmy { component: Component, ...rest }
wyrażenie na dwie oddzielne operacje:
- Operacja 1: Znajdź
component
właściwość określona na props
( Uwaga : mała litera c omponent) i przypisać go do nowej lokalizacji w stanie nazwać Component
( Uwaga : kapitał C omponent).
- Operacja 2: Następnie weź wszystkie pozostałe właściwości zdefiniowane w
props
obiekcie i zbierz je wewnątrz argumentu o nazwie rest
.
Ważne jest to, że NIE zmieniasz nazwy props
na rest
. (Nie ma też nic wspólnego z próbą „uniknięcia problemów z nazewnictwem w przypadku props
przekazywania do render
funkcji Route ”).
rest === props;
Po prostu pobierasz resztę (stąd dlaczego argument jest tak nazwany) właściwości zdefiniowanych w twoim props
obiekcie do nowego argumentu o nazwie rest
.
Przykładowe użycie
Oto przykład. Załóżmy, że mamy obiekt `myObj` zdefiniowany następująco:
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
W tym przykładzie warto pomyśleć o props
tym, że ma taką samą strukturę ( tj. Właściwości i wartości), jak pokazano w myObj
. Teraz napiszmy następujące zadanie.
const { name: Username, ...rest } = myObj
Powyższe stwierdzenie sprowadza się zarówno do deklaracji, jak i przypisania dwóch zmiennych (lub, jak sądzę, stałych). Stwierdzenie to można sobie wyobrazić jako:
Weź właściwość name
zdefiniowaną na myObj
i przypisz jej wartość do nowej zmiennej, którą wywołujemy Username
. Następnie podejmuje wszelkie inne właściwości zostały określone na myObj
( czyli , age
, sex
i dob
) i zebrać je do nowego obiektu przypisanego do nazwy zmiennej my rest
.
Logowanie Username
i rest
do console
potwierdzą to. Mamy następujące:
console.log(Username);
console.log(rest);
Dygresja
Możesz się zastanawiać:
Po co kłopotać się ściąganiem component
nieruchomości tylko po to, by zmienić jej nazwę Component
na wielką literę „C”?
Tak, wydaje się to dość trywialne. I chociaż jest to standardowa praktyka Reacta, jest powód, dla którego cała dokumentacja Facebooka dotycząca jego frameworku jest napisana jako taka. Mianowicie, kapitalizowanie niestandardowych komponentów renderowanych za pomocą JSX jest mniej praktyką samą w sobie, niż koniecznością. Reaguj, a właściwie, JSX rozróżnia wielkość liter . Komponenty niestandardowe wstawione bez wielkiej pierwszej litery nie są renderowane w modelu DOM. Tak właśnie zdefiniował się React, aby identyfikować niestandardowe komponenty. Tak więc, gdyby nie przykład dodatkowo przemianowany na component
własność, że oderwano od props
do Component
The <component {...props} />
wyrażenie nie powiedzie się poprawnie renderowania.