Javascript ES6将结构分解为“this”
正在尝试ES6解构 我在React类构造函数中使用以下代码:Javascript ES6将结构分解为“this”,javascript,reactjs,ecmascript-6,destructuring,Javascript,Reactjs,Ecmascript 6,Destructuring,正在尝试ES6解构 我在React类构造函数中使用以下代码: let { class, ...rest } = props; 上述代码有效。但是我需要这个.class和这个.rest中的变量 我有这个代码,它可以工作: let { classes, ...rest } = props; this.classes = classes; this.rest = rest; 我在找这样的东西: { this.classes, ...this.rest } = props; 实现的一个更
let { class, ...rest } = props;
上述代码有效。但是我需要这个.class和这个.rest中的变量
我有这个代码,它可以工作:
let { classes, ...rest } = props;
this.classes = classes;
this.rest = rest;
我在找这样的东西:
{ this.classes, ...this.rest } = props;
实现的一个更为棘手的方法是使用一个绑定了所需函数的函数 这里重命名是关键,这里发生的是从道具中提取值,并将其分配给我们重命名的对象
({ classes:this.classes,...this.rest } = props)
所以这实际上和
this.classes = props.classes;
this.rest = all the properties expect those which are already destrucutred
您可以将代码粘贴到此处并查看简化版
常量道具={
课程:“一些课程”,
a:‘a’,
b:‘b’
}
让我们试试他的={}
洛根提斯
让getMeValuesOnThis=functionprops{
{classes:this.classes,…this.rest}=props
}宾德先生
getMeValuesOnThisprops
console.log'--函数执行后的值--'
console.logtesthis您可以使用重命名属性,但不幸的是,这涉及到一些重复:
({ classes: this.classes, ...this.rest } = props);
类是我们从道具中获得的属性的名称;this.classes是分配给它的变量的名称。使用this.rest,我们显然不需要命名原始属性名
演示:
功能Fooprops{
{classes:this.classes,…this.rest}=props;
}
常量道具={
课程:“一些课程”,
a:‘a’,
b:‘b’
}
console.lognewfooprops;您使用的是函数组件还是类组件?还不太清楚您想要实现什么,因为我使用react-class Component想不出一种特别优雅的单行方式来实现它,但是您可以Object.assignthis、{classes,rest}或Object.assignthis、{rest:{…props},classes:props.classes}您的方式和@rayhatfield建议的方式都是正确的。然而,我觉得可能没有必要将道具复制到类变量中,因为您可以从需要的道具中访问它们。请记住,可读、易于理解的代码比保存几个键入字符更重要。首先要弄清楚,你对bind的建议毫无意义。如果在您的示例中,这是窗口对象,那么输出是正确的,但不是由于绑定,您可以删除绑定并获得相同的输出。@t.niese您是对的,但同样可以完成,在任何可能与窗口对象不同的范围内,不是吗?我投了反对票,我已经说过绑定在这里没有任何意义。bindthis对变量类和rest的查找没有任何影响。在您的示例中,编写bind{}将导致完全相同的结果。bind只对该函数中的this有影响,但对其他变量的查找没有影响,函数中也没有使用this。@t.niese oh明白了,感谢您指出,我感谢您的评论,更新:Damm this甚至更干净+1Neat,但是我很矛盾的是,那些需要相当高级的理解才能理解的代码是否真的更好。@jfriend00:我可以看出你的观点,例如。。。习语索引;但这并不完全是代码高尔夫,它只是使用现代的ES解构语法。我不会称之为高级,就像使用Set或class一样。