【发布时间】:2018-04-08 07:19:40
【问题描述】:
据我了解,这个{...props} 和{prop1, prop2, prop3} 是一回事
在声明无状态功能组件时,使用解构很方便,这样您就不必不断输入props.prop1, props.prop2 等。但是,当您有 10 多个道具时,您需要传递给您的子组件变得非常丑陋,所以我认为我可以使用扩展运算符来解构我的道具对象!
基于{...props} 与{prop1, prop2, prop3} 基本相同的想法,我希望下面的代码可以工作,但我得到了prop1 is undefined 错误
const Component = ({...props}) => {
return (
<div>
{prop1}
</div>
)
}
我正在尝试做的事情可能吗?我在网上找不到任何示例,但是如果有一种方法可以在不明确列出每个道具的情况下解构道具对象,那就太棒了!
编辑:请理解我知道如何正确访问 props 对象的属性。仔细阅读我的问题,我试图在 props 对象中传播所有属性,类似于明确声明它们的示例:
const Component = ({prop1, prop2, prop3}) => {
return (
<div>
{prop1}
</div>
)
}
我希望它的行为与使用 {...props} 初始化组件的行为相同
【问题讨论】:
-
props实际上是一个对象,所以你需要这样访问它:props.prop1 -
当然可以,但是如果我解构为 ({ prop1 }) 我可以显式访问 prop1。所以我希望扩展运算符会创建类似的行为,但它不会
-
"据我了解,
{...props}与{prop1, prop2, prop3}" - 嗯,不。如果你想解构到单个变量,你需要明确地这样做。写出你真正的意思。 -
首先,没有“传播算子”。其次,你没有在这里传播任何东西。在这种情况下,
{...props}意味着作为参数传递的对象的所有剩余(“rest”)属性都应该收集到分配给props的新对象中。因此({...props}) => {}与props => {}基本相同,所以你什么也得不到。如果你写的是{prop1, ...props},那就不一样了。这将从传递的对象中提取prop1并将其分配给变量prop1,并将prop2和prop3) 分配给分配给props的新对象。 -
为了完整起见,您基本上需要
with语句,如Destructuring an object without specifying its properties 中所述,但不推荐使用with语句,在严格模式下不起作用,ES6 模块是严格的.
标签: javascript reactjs ecmascript-6 ecmascript-next