【问题标题】:What does three dots do in ReactJS [duplicate]ReactJS中的三个点有什么作用[重复]
【发布时间】:2017-08-06 07:36:46
【问题描述】:
const peopleList = this.state.people.map( x => {

    return <Person key={x.name} {...x} />
})

这段代码的“{...x}”是什么意思?

【问题讨论】:

标签: javascript reactjs ecmascript-6


【解决方案1】:

这是 react 中的扩展运算符语法。

来自MDN DOCS

展开语法允许表达式在以下位置展开 多个参数(用于函数调用)或多个元素(用于 数组文字)或多个变量(用于解构赋值) 预计。

在您的情况下,&lt;Person key={x.name} {...x} /&gt; 这意味着将x 包含的整个对象或属性发送给Person Component,因为它看起来像道具一样

例如如果

var x = {
     name: "Hello",
     last_name: "World"

}

如果你这样做&lt;Person key={x.name} {...x} /&gt;

以上将等价于

<Person key={x.name} name={x.name} last_name={x.last_name}/>

展开语法与道具一起使用的顺序也很重要。

考虑将道具传递给组件的情况

var data = {
     name: 'abc',
     age: '25',
     college: 'lmit'
}

如果您使用扩展运算符语法,例如

 <Person key={x.name} name='xyz' {...data} />

然后 prop name='xyz' 被从数据解析的键值对覆盖。所以最终的Person 组件调用看起来像

 <Person key={x.name} name='abc' age= '25' college= 'lmit' />

但是当你这样写的时候

 <Person key={x.name}  {...data} name='xyz' />

然后,从数据中解析出来的 prop name='abc' 被显式传递给 Personname='xyz' 覆盖。所以最终的Person 组件调用看起来像

  <Person key={x.name} name='xyz' age= '25' college= 'lmit' />

【讨论】:

  • 我以前从未使用过扩展运算符。我应该。
  • @Ved 是的,有时它使代码非常短并且非常有用
  • 是的。有时我们习惯了使用通用语法。ES6 的强大功能仍然需要进一步探索。
  • 解释得很好......谢谢!
【解决方案2】:

那是展开运算符。它是在 ES2015 中引入的。它获取 x 的所有属性并将它们分配给元素。

{...x} 表示将所有属性分配给对象 x,然后将它们分配给&lt;Person /&gt;

你可以在这里阅读更多:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2016-02-14
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多