Javascript 什么';ES6魔法正在这个反应组件中发生?

Javascript 什么';ES6魔法正在这个反应组件中发生?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我正在学习本教程,现在正在学习 这引入了一个AuthenticatedRoute,它检查名为isAuthenticated的道具的值,以决定是否渲染组件或将用户重定向到login import React from "react"; import { Route, Redirect } from "react-router-dom"; export default ({ component: C, props: cProps, ...rest }) => <Route

我正在学习本教程,现在正在学习

这引入了一个
AuthenticatedRoute
,它检查名为
isAuthenticated
的道具的值,以决定是否渲染组件或将用户重定向到
login

import React from "react";
import { Route, Redirect } from "react-router-dom";

export default ({ component: C, props: cProps, ...rest }) =>
  <Route
    {...rest}
    render={props =>
      cProps.isAuthenticated
        ? <C {...props} {...cProps} />
        : <Redirect
            to={`/login?redirect=${props.location.pathname}${props.location
              .search}`}
          />}
  />;
从“React”导入React;
从“react router dom”导入{Route,Redirect};
导出默认值({component:C,props:cProps,…rest})=>
cProps.i认证
? 
: }
/>;
我得到了它的成就,但我不确定它是如何做到的

有人能给我解释一下下面这些是怎么回事吗

  • 组件:C
  • …rest

认证路由
是一个(无状态)组件-一个函数

  • 使用props作为第一个参数调用组件,此行
    ({component:C,props:cProps,…rest})
    props,并将其中一些分配给变量。
    component:C
    从props对象中提取
    component
    属性,并将其分配给变量
    C

  • ({component:C,props:cProps,…rest})中的
    …rest
    是的一部分,您需要巴别塔才能在当前浏览器中工作。它从所有未分配给变量(其余)的对象属性创建一个新对象

  • 是react的,它将所有对象(
    props
    cProps
    )属性转换为组件属性(如write key=value)。
    cProps
    中的道具将覆盖
    Props
    的属性,因为它们出现在它们之后


  • 在这种情况下,
    Authenticated Route
    被称为高阶组件<代码>经过身份验证的路由
    包装您的
    路由
    组件,如果用户经过身份验证或
    重定向
    组件,则有条件地返回
    组件:C

    • component
      它是一个简单的
      Authenticated Route
      道具,但是它被重命名为
      C
      ,因为react component必须大写
    • props:cProps
      这是您希望接收到组件的道具
    • props
      它是一个需要应用于组件的
      Route
      渲染道具,渲染方法应该返回该道具
    • …rest
      它是一个包含任何其他道具的对象,基本上是指
      路线
    • 关于{…someData}您已经在上面的评论中得到了回答

    然后,您可以简单地包装使用
    并根据上面写的信息传递所需的道具组件:C-在ES6中,如果参数未传递,您可以进行默认初始化。在这里,组件将默认为C

    …rest-使用ES6,您可以扩展数据结构的元素。在这里,rest可能具有渲染函数的路由路径


    -cprops和props的每个元素都作为属性传递给C组件。cProps中的道具将覆盖道具后面显示的属性。

    这里有一个好的起点:可能重复的道具