Javascript 这是类型注释、对象还是其他内容?
我在看的时候偶然发现了这个语法:Javascript 这是类型注释、对象还是其他内容?,javascript,reactjs,Javascript,Reactjs,我在看的时候偶然发现了这个语法: import React, { Component } from 'react'; const PrivateRoute = ({component:Component, ...rest}) => ( //(...) <Component {...props} /> // (...) ); 这是ES6中的命名对象。下面 const PrivateRoute = ({component:Component, ...rest}) =>
import React, { Component } from 'react';
const PrivateRoute = ({component:Component, ...rest}) => (
//(...)
<Component {...props} />
// (...)
);
这是ES6中的命名对象。下面
const PrivateRoute = ({component:Component, ...rest}) => (
表示将作为component
属性传递给PrivateRoute
的任何内容,都可以使用component
变量使用它
我对:组成部分感到困惑。这看起来像一个静态类型注释
是的,它看起来像是因为全局组件
类的名称被阴影覆盖,因此它看起来像是组件
使用Typescript注释作为组件
键入的。但是,在Typescript中,类型将跟随对象文字,因此:
({ component: Component, ...rest }: { component: Component, rest: any })
因此,实际上第一个组件
是解构变量的名称,而第二个组件
将组件
作为一个组件进行分类。我会明确地将内部变量重命名为更有意义的名称,以防止阴影:
({ component: ChildComponent, ...rest }) => (
//...
<ChildComponent {...props} />
)
这肯定会与Typescript冲突?@murat不,Typescript注释位于对象
{a:b}:{a:type}
之后。是的,这是令人困惑的(这就是为什么我最初用这个来代替错误的东西)在Typescript中你会使用({component:component,{rest}:{component:component,rest:any})啊,我明白了。谢谢这实际上对ReactJs非常有用。@Asik是的,它只是一个任意的名称。但是由于React约定,显然需要将组件传递给component
属性,因此在名称中使用大写名称:component
({ component: ChildComponent, ...rest }) => (
//...
<ChildComponent {...props} />
)
props => {
const ChildComponent = props.component,
rest = props;
return <ChildComponent {...rest}/>
};
({ component: ChildComponent = DefaultComponent, ...rest }) =>