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ść, Componenta następnie wszystkie inne propsdane, i zmień nazwę propsna, restaby uniknąć problemów z nazewnictwem z
propsprzekazaną do renderfunkcji 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ź
componentwł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
propsobiekcie i zbierz je wewnątrz argumentu o nazwie rest.
Ważne jest to, że NIE zmieniasz nazwy propsna rest. (Nie ma też nic wspólnego z próbą „uniknięcia problemów z nazewnictwem w przypadku propsprzekazywania do renderfunkcji Route ”).
rest === props;
Po prostu pobierasz resztę (stąd dlaczego argument jest tak nazwany) właściwości zdefiniowanych w twoim propsobiekcie 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 propstym, ż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ść namezdefiniowaną na myObji 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, sexi dob) i zebrać je do nowego obiektu przypisanego do nazwy zmiennej my rest.
Logowanie Usernamei restdo consolepotwierdzą to. Mamy następujące:
console.log(Username);
console.log(rest);
Dygresja
Możesz się zastanawiać:
Po co kłopotać się ściąganiem componentnieruchomości tylko po to, by zmienić jej nazwę Componentna 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 componentwłasność, że oderwano od propsdo ComponentThe <component {...props} />wyrażenie nie powiedzie się poprawnie renderowania.