Ce qui signifie-t-il ...reste à Réagir JSX
En regardant cette Réagissent Routeur Dom v4 exemple https://reacttraining.com/react-router/web/example/auth-workflow je vois que PrivateRoute composant destructures un repos prop comme ce
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
Je veux être certain que { component: Component, ...rest }
signifie:
De
props
, obtenir le Composant d'accessoires et de tous les autres accessoires donnée à vous, et renommerprops
àrest
de sorte que vous pouvez éviter de nommer des problèmes avec les accessoires transmis à la Routerender
fonction
Suis-je droit?
- C'est un non-standardisé encore syntaxe définie dans github.com/tc39/proposal-object-rest-spread
Vous devez vous connecter pour publier un commentaire.
Désolé, j'ai réalisé ma première réponse (bien que j'espère toujours fournir des informations utiles sur/plus de contexte) ne répond pas à votre question. Permettez-moi d'essayer de nouveau.
Vous demander:
Vous êtes interprétation n'est pas tout à fait correct. Basé sur vos pensées, bien, on dirait que vous vous êtes au moins conscient du fait que ce qui se passe ici à une sorte de objet déstructuration (voir la deuxième réponse et les commentaires pour plus de précisions).
De donner une explication précise, nous allons briser le
{ component: Component, ...rest }
expression dans deux opérations distinctes:component
propriété définie surprops
(Note: minuscules ccomposant) et l'attribuer à un nouvel emplacement dans l'état que nous appelonsComponent
(Note: capital Ccomposant).props
objet et les rassembler à l'intérieur d'un argument appelérest
.Le point important est que vous n'êtes PAS renommer
props
àrest
. (Et il n'a à voir avec le fait de "ne pas nommer les problèmes avec leprops
transmis à la Routerender
fonction".)Votre simplement en tirant hors le reste (c'est pourquoi l'argument est nommé que) les propriétés définies sur votre
props
objet dans un nouvel argument appelérest
.Exemple D'Utilisation
Voici un exemple. Imaginons que nous avons un objet
myObj
définis comme suit:Pour cet exemple, il peut être utile de penser de
props
comme ayant la même structure (c'est à dire, propriétés et valeurs) comme indiqué dansmyObj
. Maintenant, nous allons écrire la suite de cette cession.La déclaration des montants ci-dessus à la fois à l' déclaration et affectation de deux variables (ou, je suppose, des constantes). La déclaration peut être pensé comme:
Journalisation
Username
etrest
à laconsole
permettrait de le confirmer. Nous avons les éléments suivants:Côté Remarque
Vous demandez peut-être:
Ouais, il semble assez trivial. Et, alors qu'il s'agit d'une norme Réagir la pratique, il y a une raison pour laquelle toutes Facebook de la documentation sur son cadre est écrit en tant que tel. À savoir, profitant des composants personnalisés rendu avec JSX est moins une pratique de soi que c'est une nécessité. Réagir, ou plus correctement, JSX est sensible à la casse. Composants personnalisés inséré sans majuscule de la première lettre ne sont pas rendus à la DOM. C'est juste comment Réagir a défini lui-même pour identifier les composants personnalisés. Ainsi, si l'exemple à ne pas en outre renommé le
component
de la propriété qui a été tiré hors deprops
àComponent
, le<component {...props} />
expression de ne pas s'afficher correctement.Il vous permet de "propagation" tous vos
props
dans une seule expression concise. Par exemple, supposons leprops
reçu par votrePrivateRoute
composant ressembleSi vous voulais plus part de ces éléments (c'est à dire,
thing1
etthing2
) jusqu'à la imbriquée<Component />
tag et vous n'êtes pas familier avec la objet propagation syntaxe, vous pouvez écrire:Cependant, la
{ ...props }
syntaxe permet d'éviter un tel niveau de verbosité en vous permettant de propagation votreprops
objet de la même manière on pourrait propagation un tableau de valeurs (par exemple,[...vals]
). En d'autres termes, le JSX expression ci-dessous et ci-dessus sont exactement équivalents....rest
dans{ component: Component, ...rest }
recueille tous les autres propriétés de l'objetrest
. La question est à propos...rest
, pas{...props}
{ ...myObj }
dans un non-Réagir environnement (par exemple, le navigateur de la console) va lancer uneSyntaxError
. Néanmoins, ES6 du rest_/_spread fournir un cadre conceptuel pour penser JSX de l'objet écart.Permet de garder les choses simples. En javaScript, si touche,la valeur des paires de même,
obj={compte:compte} est la même que obj={compte}. Donc, lors du passage d'accessoires de parent à enfant composant:
vous serez en passant reste de accessoires en tant qu'