此语法与object dectructuring 相关(请参阅examples)并且在 React 中很常见,因为组件可以声明为称为 props 的单个对象的函数。
而不是写:
var Hello = (props) => {
return <div>Hello {props.name} from {props.city} with {props.item}</div>;
}
您可以将其简化为以下形式:
var Hello = ({name, city, item}) => <div>Hello {name} from {city} with {item}</div>
在您的示例中,它将props 解构为属性para1 和para2。
var works = ({para1, para2}) => console.log(para1, para2)
works({para1: 'test', para2: 'another one'})
works({para2: 'another one', para1: 'test', anotherProp: 'does not matter'})
如您所见,传递属性的顺序无关紧要。与默认参数列表语法相反。这种行为在 React 应用程序中可能是有利的,因为组件倾向于接受多个命名属性。
语法问题
如果函数参数中的对象解构没有大括号,您会收到语法错误,因为它被解析为对象文字。
var doesntWork = {para1, para2} => console.log(para1, para2)
当您想在箭头函数中返回一个对象时,也会出现同样的问题,这可能会导致不良行为。例如,此代码将返回并打印undefined。
var add = ({a, b}) => {sum: a + b}
var result = add({b: 3, a: 5})
console.log(result)
括号被解析为代码块,而不是表达式。要修复代码,它应该用大括号括起来:var add = ({a, b}) => ({sum: a + b})
对象和数组解构是一个强大的工具,它使 React 中的无状态功能组件成为可能和可行。代码变得更简单,更易读。