Извините, я понял, что мой первый ответ (хотя, надеюсь, все еще предоставляет полезный / дополнительный контекст) не отвечает на ваш вопрос. Дай мне попробовать снова.
Ты спрашиваешь:
Я хочу быть уверен, что это { component: Component, ...rest }
означает:
От props
, получите Component
опору, а затем все остальные props
данные вам и переименуйте props
в, rest
чтобы избежать проблем с именованием
props
переданной render
функции Route
Ваша интерпретация не совсем верна. Однако, исходя из ваших мыслей, похоже, что вы, по крайней мере, знаете о том, что то, что здесь происходит, представляет собой своего рода деструктуризацию объекта (см. Второй ответ и комментарии там для дополнительных разъяснений).
Чтобы дать точное объяснение, давайте разделим { component: Component, ...rest }
выражение на две отдельные операции:
- Операция 1: Найдите
component
свойство , определенное на props
( Примечание : в нижнем регистре с omponent) и назначить его на новое место в государстве мы называем Component
( Примечание : капитальное C omponent).
- Операция 2: Затем возьмите все оставшиеся свойства, определенные для
props
объекта, и соберите их внутри вызываемого аргумента rest
.
Важным моментом является то, что вы НЕ переименовываете props
в rest
. (И это не связано с попыткой «избежать проблем с именованием props
переданной render
функции Route ».)
rest === props;
Вы просто переносите остальные (поэтому аргумент так назван) свойств, определенных для вашего props
объекта, в новый вызываемый аргумент rest
.
Пример использования
Вот пример. Предположим, у нас есть объект myObj, определенный следующим образом:
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
В этом примере может помочь просто представить себе props
такую же структуру ( т. Е. Свойства и значения), как показано в myObj
. Теперь напишем следующее задание.
const { name: Username, ...rest } = myObj
Приведенное выше утверждение сводится как к объявлению, так и к присвоению двух переменных (или, я думаю, констант). Заявление можно представить как:
Возьмите name
определенное свойство myObj
и присвойте его значение новой переменной, которую мы вызываем Username
. Затем, возьмите любые другие свойства были определены на myObj
( то есть , age
, sex
и dob
) и собрать их в новый объект , назначенный для имени переменных мы rest
.
Лесозаготовки Username
и rest
к console
подтвердит это. У нас есть следующее:
console.log(Username);
console.log(rest);
Примечание
Вы можете спросить:
Зачем тратить силы на снятие component
собственности только для того, чтобы переименовать ее Component
с большой буквы «C»?
Да, это кажется довольно тривиальным. И хотя это стандартная практика React, есть причина, по которой вся документация Facebook по его фреймворку написана именно так. А именно, использование заглавных букв в пользовательских компонентах, отображаемых с помощью JSX, - это не столько практика как таковая, сколько необходимость. React, точнее, JSX чувствителен к регистру . Пользовательские компоненты, вставленные без заглавной буквы, не отображаются в модели DOM. Именно так React определил себя для идентификации пользовательских компонентов. Таким образом, был пример дополнительно не переименовал component
свойство, вытянутую из props
к Component
, то <component {...props} />
выражение будет не правильно отображался.