这是什么意思...在React JSX中存在

razor7:

看看这个React Router Dom v4示例https://reacttraining.com/react-router/web/example/auth-workflow我看到PrivateRoute组件像这样破坏了一个休息道具

const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route {...rest} render={props => (
    fakeAuth.isAuthenticated ? (
      <Component {...props}/>
    ) : (
      <Redirect to={{
        pathname: '/login',
        state: { from: props.location }
      }}/>
    )
  )}/>
)

我想确定这{ component: Component, ...rest }意味着:

从中props获取Component属性,然后再提供所有其他属性,然后重命名props为,rest这样就可以避免传递给Route render函数的属性的命名问题

我对吗?

IsenrichO:

抱歉,我意识到我的第一个答案(虽然希望仍能提供有用的/附加的上下文)不能回答您的问题。让我再试一遍。

你问:

我想确定这{ component: Component, ...rest }意味着:

从中props获取Component道具,然后将所有其他道具props提供给您,然后重命名props为,rest这样您就可以避免props传递给Route render函数的命名问题

您的解释不太正确。但是,根据您的想法,听起来您至少知道以下事实:某种形式的对象破坏(请参见第二个答案和评论以获取更多说明)。

为了给出准确的解释,让我们将{ component: Component, ...rest }表达式分解为两个单独的操作:

  1. 操作1:查找component上定义的属性props注意:小写Ç omponent),并将其分配给状态我们称之为新的位置Component:资本Ç omponent)。
  2. 操作2:然后,获取对象上定义的所有剩余属性,props并将它们收集在称为的参数中rest

重要的一点是您不会重命名propsrest(并且也与尝试“避免props传递给Route render函数的命名问题”有关。)

rest === props;
// => false

您只需将对象上定义的属性的其余部分(因此将其命名为该参数)转换为名为props的新参数rest


用法示例

这是一个例子。假设我们有一个myObj定义如下的对象

const myObj = {
  name: 'John Doe',
  age: 35,
  sex: 'M',
  dob: new Date(1990, 1, 1)
};

对于此示例,可能会想像一下props具有相同的结构(,属性和值)可能会有所帮助myObj现在,让我们编写以下任务。

const { name: Username, ...rest } = myObj

上面的声明相当于两个变量(或者,我想是常量)声明赋值该语句可以认为是:

接受name定义的属性myObj并将其值分配给我们称为的新变量Username然后,取中定义的任何其他属性myObjagesexdob),并收集他们到分配给变量我们名称的新对象rest

登录Usernamerestconsole会证实这一点。我们有以下内容:

console.log(Username);
// => John Doe
console.log(rest);
// => { age: 35, sex: 'M', dob: Mon Jan 01 1990 00:00:00 GMT-0800 (PST) }

边注

您可能想知道:

为什么要取消component财产而只Component用大写字母“ C” 重命名呢

是的,这似乎很琐碎。而且,尽管这是标准的React做法,但有理由将Facebook框架上的所有文档都照这样编写。也就是说,使用JSX呈现的自定义组件大写本身不是一种实践,而是一种必要。React,或更恰当地说,JSX是区分大小写的插入的没有大写首字母的自定义组件不会呈现给DOM。这就是React定义自己以识别自定义组件的方式。因此,如果该示例未另外重命名从中component拉出属性,则表达式将无法正确呈现。propsComponent<component {...props} />

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

(JSX)是React中JavaScript的语法扩展是什么意思

在 CSS 中:这是什么意思:

这个React组件中的{... props}是什么意思?

glimmerjs中的react context是什么意思?

在React中,尖括号和星号是什么意思?

$字符在React Native中是什么意思?

':' 在 React.js 中是什么意思?

React 中的叶子组件是什么意思?

在pascal中这是什么意思:const char ** pzTail

在Matlab中这是什么意思:x = x(:,N)

在本机中孤立请求的任务–这是什么意思?

了解PHP中的Callable类型-这是什么意思?

C#中的“这是ClassName”语句是什么意思?

这是什么意思,对象以javascript中的数组开头

这是什么意思(计算中的<<和>>>)?

XML文档(2,2)中存在错误。这是什么意思?

这是什么“|” (pipe) 在 C# 中是什么意思?

这是什么新的关键字“产量”在Java中13是什么意思?

这是什么...(三点)在c ++中是什么意思

JavaScript 中只读属性的定义是什么?这是什么意思?

ActivityManager中的奇怪函数:isUserAMonkey。这是什么意思,有什么用?

当“方法存在但特质界限不满足”时,这是什么意思?

数据模型中的“模型”或React中的模型数据是什么意思?

在react-devtools中,“ highlightUpdates”选项的各种突出显示颜色是什么意思

不了解React / WebPack中的此错误是什么意思

这个错误在 Wordpress React 中是什么意思?错误:听 EADDRINUSE :::8090

react-native提取中的'then(res => res.json())'是什么意思?

在React Native Perf Monitor中,“视图”列是什么意思?

Swift中的错误处理不涉及堆栈展开。这是什么意思?