【发布时间】:2016-10-03 19:39:11
【问题描述】:
这是错误信息:
SyntaxError: <local path>/Icon.jsx: Unexpected token (13:2)
11 |
12 | return (
> 13 | <{props.component} onclick=props.onClick styleName=props.classNames style=props.style/>
| ^
14 | );
15 | };
我似乎无法弄清楚如何在无状态函数返回中修复这个语法错误,这里是代码:
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './Icon.css';
const Icon = (props) => {
let classNames = `icon-${props.name}`;
if (props.className) {
classNames = `${classNames} ${props.className}`;
}
return (
<{props.component} onclick={props.onClick} styleName={props.classNames} style={props.style} />
);
};
Icon.propTypes = {
name: React.PropTypes.string.isRequired,
className: React.PropTypes.string,
onClick: React.PropTypes.func,
component: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.func]),
style: React.PropTypes.object,
};
Icon.defaultProps = {
component: 'span',
};
export default CSSModules(Icon, styles, { allowMultiple: true, errorWhenNotFound: false });
这是 .babelrc 配置:
{
"presets": [
"es2015",
"stage-0",
"react"
],
"plugins": [
[
"transform-runtime",
"react-intl", {
"messagesDir": "./build/messages",
"enforceDescriptions": false
}
]
]
}
这里是同样的组件,没有无状态函数或箭头语法,工作正常:
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './Icon.css';
class Icon extends React.Component {
static defaultProps = {
Component: 'span',
};
/**
* render component
* @return {object}
*/
render() {
const {
Component,
name,
className,
style,
onClick,
} = this.props;
let classNames = `icon-${name}`;
if (className) {
classNames = `${classNames} ${className}`;
}
return <Component onClick={onClick} styleName={classNames} style={style} />;
}
}
Icon.propTypes = {
name: React.PropTypes.string.isRequired,
className: React.PropTypes.string,
onClick: React.PropTypes.func,
Component: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.func]),
style: React.PropTypes.object,
};
export default CSSModules(Icon, styles, { allowMultiple: true, errorWhenNotFound: false });
我已经尝试了所有相关的答案,但没有成功,有什么建议吗?
【问题讨论】:
-
语法乍一看没问题...您是否检查过以确保在 JSX 中像这样使用
{props.component}是有效的?我不知道它不是——只是以前没见过。我将签入我的一个应用程序。 -
我想是的,我在其他可以正常工作的组件中使用它,但不知何故我在这个组件中犯了一个错误。
-
props.component 应该是什么?我的阅读方式是您将一个组件传递给道具,然后将所有其他道具绑定到该组件中。但我可能读错了
-
表示html标签或其他组件,本例默认
span,命名不好,等我解决问题再修复 -
您不能使用
{...}来计算组件名称。请参阅规范:facebook.github.io/jsx。
标签: reactjs ecmascript-6 babeljs stateless arrow-functions