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
,因为react component必须大写C
这是您希望接收到组件的道具props:cProps
它是一个需要应用于组件的props
渲染道具,渲染方法应该返回该道具Route
它是一个包含任何其他道具的对象,基本上是指…rest
路线
- 关于{…someData}您已经在上面的评论中得到了回答
然后,您可以简单地包装使用
并根据上面写的信息传递所需的道具组件:C-在ES6中,如果参数未传递,您可以进行默认初始化。在这里,组件将默认为C
…rest-使用ES6,您可以扩展数据结构的元素。在这里,rest可能具有渲染函数的路由路径
-cprops和props的每个元素都作为属性传递给C组件。cProps中的道具将覆盖道具后面显示的属性。这里有一个好的起点:可能重复的道具