我正在使用airbnb设置,它有强制无状态反应组件被重写为纯函数的规则。。以下组件触发此规则,这意味着下面的组件将更好地编写为纯函数:
import React from 'react';
import { observer } from 'mobx-react';
import cssmodules from 'react-css-modules';
import styles from './index.css';
import Select from '../Select/';
import List from '../List/';
@cssmodules(styles)
@observer
export default class Analysis extends React.Component {
render() {
return (
<div styleName="wrapper">
<div styleName="column">
<Select store={this.props.store} />
</div>
<div styleName="column">
<List store={this.props.store} />
</div>
</div>
);
}
}
Analysis.propTypes = {
store: React.PropTypes.object.isRequired,
};但是,当我将它重写为纯函数时(参见下面),我得到了Leading decorators must be attached to a class declaration的错误
import React from 'react';
import { observer } from 'mobx-react';
import cssmodules from 'react-css-modules';
import styles from './index.css';
import Select from '../Select/';
import List from '../List/';
@cssmodules(styles)
@observer
function Analysis(props) {
return (
<div styleName="wrapper">
<div styleName="column">
<Select store={props.store} />
</div>
<div styleName="column">
<List store={props.store} />
</div>
</div>
);
}
Analysis.propTypes = {
store: React.PropTypes.object.isRequired,
};所以,我可以把它写成一个纯组件,还可以附加装饰器吗?或者这是airbnb衬里规则中的一个错误,并且不可能同时满足这两种规则吗?
发布于 2016-09-14 10:49:18
好的,所以问题是es7风格的装饰器。他们解决了这个问题:
import React from 'react';
import { observer } from 'mobx-react';
import cssmodules from 'react-css-modules';
import styles from './index.css';
import Select from '../Select/';
import List from '../List/';
function Analysis(props) {
return (
<div styleName="wrapper">
<div styleName="column">
<Select store={props.store} />
</div>
<div styleName="column">
<List store={props.store} />
</div>
</div>
);
}
Analysis.propTypes = {
store: React.PropTypes.object.isRequired,
};
export default cssmodules(observer(Analysis), styles);它不漂亮,但它确实有效,也不会触发任何错误。
https://stackoverflow.com/questions/39488212
复制相似问题