您是否正在寻找 ES6 命名参数语法(这只是解构)?
const ChildComponent = ({ propName }) => (
<div>
<h1>Child Component</h1>
</div>
)
const ChildComponent = (props) => ( // without named arguments
<div>
<h1>Child Component</h1>
</div>
)
可选地,您的函数还有第二个参数,具体取决于您是否为组件指定了上下文。
也许有一个链接到文档会更有帮助。如关于功能组件的第一篇文章所述。传递给组件的任何props都表示为作为第一个参数传递给功能组件的对象。
更进一步,关于 jsx 中的扩展符号。
当您在组件中编写时:
<Child prop1={value1} prop2={value2} />
您的组件将收到一个普通对象,如下所示:
{ prop1: value1, prop2: value2 }
(请注意,它不是 Map,而是仅以字符串作为键的对象)。
因此,当您将扩展语法与 JS 对象一起使用时,它实际上是一种快捷方式
const object = { key1: value1, key2: value2 }
<Component {...object}/>
相当于
<Component key1={value1} key2={value2} />
实际上编译为
return React.createElement(Component, object); // second arg is props
您当然可以使用第二种语法,但要注意顺序。更具体的语法 (prop=value) 必须放在最后:更具体的指令放在最后。
如果你这样做:
<Component key={value} {...props} />
它编译为
React.createElement(Component, _extends({ key: value }, props));
如果你这样做(你可能应该这样做)
<Component {...props} key={value} />
它编译为
React.createElement(Component, _extends(props, { key: value }));
其中extends 是*Object.assign(如果不存在则为polyfill)。
为了更进一步,我真的建议花一些时间用他们的在线编辑器观察 Babel 的输出。了解 jsx 的工作原理非常有趣,更一般地说,您可以如何使用 ES5 工具实现 es6 语法。