我正试图围绕这是如何编码
const NavLink = ({
to,
exact,
strict,
activeClassName,
className,
activeStyle,
style,
isActive: getIsActive,
...rest
}) => (
<Route
path={typeof to === 'object' ? to.pathname : to}
exact={exact}
strict={strict}
children={({ location, match }) => {
const isActive = !!(getIsActive ? getIsActive(match, location) : match)
return (
<Link
to={to}
className={isActive ? [ activeClassName, className ].join(' ') : className}
style={isActive ? { ...style, ...activeStyle } : style}
{...rest}
/>
)
}}
/>
)
这里发生了什么?这是否定义了一个返回JSX元素的函数?抛出我的唯一一件事是将JSX元素包装在括号()
有isActive: getIsActive
的第一部分是怎么回事?
我在查看http://es6-features.org/#ExpressionBodies并找不到直接的例子。
我试图找出如何使用isActive
的{{1}}方法,但无法解析此代码。
答案 0 :(得分:2)
isActive: getIsActive
- 这是[{1}}与isActive
的别名。在组件的道具中有一个名为getIsActive
的道具,它通过使用对象解构提取并在本地重命名为isActive
。
这里需要括号,因为jsx标记跨越多行。如果它是单行jsx,则不需要括号。
是的,这是一个返回jsx标记的函数(组件)。这被称为getIsActive
,因为它只是一个简单的功能。相反的是一个完整的React组件,它扩展了stateless component
。
答案 1 :(得分:1)
您在函数参数中看到的是对象解构。每当你创建一个无状态组件时,它就会响应props
作为无状态函数的参数传入。
isActive: getIsActive
表示从isActive
对象获取属性props
并将其设置为名为getIsActive
的变量,这是您可以使用对象解构进行的操作。
其余部分只是从props
对象中提取我们想要的特定属性,并将它们转换为自己的变量。这非常适合声明组件将要使用的道具。 ...rest
将创建一个名为rest
的变量,该变量将是一个具有之前未声明的剩余属性的对象。
您可以在此处找到有关解构的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
由于jsx跨越多行而在一行上,所以括号是存在的,因为我们立即返回并且没有在函数中进行任何赋值,所以我们不需要在函数体周围使用块。解构赋值语法是一个JavaScript表达式 可以将数组或对象中的数据提取到不同的数据中 变量