Lo siento, me di cuenta de que mi primera respuesta (aunque espero que siga brindando un contexto útil / adicional) no responde a su pregunta. Déjame intentar de nuevo.
Usted pregunta:
Quiero estar seguro de que eso { component: Component, ...rest }
significa:
Desde props
, obtener el Component
puntal y luego todos los demás props
que le ha asignado, y el cambio de nombre props
a rest
lo que puede evitar nombrar a problemas con el
props
pasado a la Ruta render
función
Tu interpretación no es del todo correcta. Sin embargo, según sus pensamientos, parece que al menos es consciente del hecho de que lo que está sucediendo aquí equivale a una especie de desestructuración de objetos (consulte la segunda respuesta y los comentarios para obtener más aclaraciones).
Para dar una explicación precisa, descompongamos la { component: Component, ...rest }
expresión en dos operaciones separadas:
- Operación 1: Encuentre la
component
propiedad definida en props
( Nota : en minúscula c omponent) y asignarla a una nueva ubicación en el estado que llamamos Component
( Nota : el capital C omponent).
- Operación 2: Luego, tome todas las propiedades restantes definidas en el
props
objeto y recójalas dentro de un argumento llamado rest
.
El punto importante es que NO estás cambiando el nombre props
a rest
. (Y tampoco tiene que ver con intentar "evitar problemas de nombres con la función props
pasada a la ruta render
").
rest === props;
Simplemente está sacando el resto (de ahí por qué el argumento se llama así) de las propiedades definidas en su props
objeto en un nuevo argumento llamado rest
.
Ejemplo de uso
He aquí un ejemplo. Supongamos que tenemos un objeto `myObj` definido de la siguiente manera:
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
Para este ejemplo, puede ser útil pensar props
que tiene la misma estructura ( es decir , propiedades y valores) que se muestra en myObj
. Ahora, escriba la siguiente tarea.
const { name: Username, ...rest } = myObj
La declaración anterior equivale tanto a la declaración como a la asignación de dos variables (o, supongo, constantes). La declaración se puede pensar como:
Tome la propiedad name
definida en myObj
y asigne su valor a una nueva variable que llamamos Username
. A continuación, tomar cualesquiera otras propiedades se define en myObj
( es decir , age
, sex
y dob
) y les recogerá en un nuevo objeto asignado al nombre de variable nos rest
.
El registro Username
y rest
el console
confirmarían esto. Tenemos lo siguiente:
console.log(Username);
console.log(rest);
Nota al margen
Puede preguntarse:
¿Por qué tomarse la molestia de retirar la component
propiedad solo para cambiarle el nombre Component
con una letra "C" mayúscula?
Sí, parece bastante trivial. Y, si bien es una práctica estándar de React, hay una razón por la que toda la documentación de Facebook en su marco está escrita como tal. Es decir, capitalizar componentes personalizados renderizados con JSX es menos una práctica per se que una necesidad. Reaccionar, o más correctamente, JSX distingue entre mayúsculas y minúsculas . Los componentes personalizados insertados sin una primera letra en mayúscula no se representan en el DOM. Así es como React se ha definido a sí mismo para identificar componentes personalizados. Por lo tanto, tenía el ejemplo no, además, cambió el nombre del component
propiedad que fue retirado de props
a Component
, la <component {...props} />
expresión sería no se visualizará correctamente.