Извините, я понял, что мой первый ответ (хотя, надеюсь, все еще предоставляет полезный / дополнительный контекст) не отвечает на ваш вопрос. Дай мне попробовать снова.
Ты спрашиваешь:
Я хочу быть уверен, что это { 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} />выражение будет не правильно отображался.