这是类型注释,对象还是其他什么?

Asi*_*sik 2 javascript reactjs

我正在看这个代码示例,并偶然发现了这种语法:

import React, { Component } from 'react';

const PrivateRoute = ({component:Component, ...rest}) => (
//(...)
  <Component {...props} />
// (...)
);
Run Code Online (Sandbox Code Playgroud)

我对这:Component部分感到困惑.这看起来像一个静态类型的注释,其行为类似于泛型,但这是Javascript所以它只能是一个对象,对吧?如果这是一个对象,这是否意味着该函数将默认的空Component对象分配给它自己的参数?如果是这样,它如何能够从调用者接收它,例如(根据示例):

<PrivateRoute path="/protected" component={Protected} />
Run Code Online (Sandbox Code Playgroud)

gio*_*gim 5

这是从ES6 命名的对象解构.下面

const PrivateRoute = ({component:Component, ...rest}) => (
Run Code Online (Sandbox Code Playgroud)

意味着,无论将被传递到PrivateRoute作为component属性,可以使用使用Component变量.

  • @Asik是的,它只是任意名称.但由于React约定显然想要将组件传递给`component`属性,因此在名称中使用大写名称:`Component` (2认同)