我正在用babel和webpack写一个反应应用程序。它一直很顺利,直到我尝试在类上添加属性 - 特别是尝试使用React-Toolbox中的Dropdown(http://react-toolbox.com/#/components/dropdown)并暂时在连接数据之前,我直接复制这样:
class DropdownTest extends React.Component {
state = {
value: 'ES-es',
};
handleChange = (value) => {
this.setState({value: value});
};
render () {}
这是我稍微修改过的版本:
class ChordFilters extends Component {
state = {
value: 'Mandolin',
};
handleChange = (value) => {
this.setState({value: value});
};
render() {
我添加state
对象后,我在webpack中遇到错误:Syntax Error, unexpected Token
,状态='宣言。这是完整的错误:
at Parser.pp.raise (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/location.js:24:13)
at Parser.pp.unexpected (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/util.js:82:8)
at Parser.pp.parseClassProperty (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/statement.js:624:61)
at Parser.parseClassProperty (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/plugins/flow.js:797:20)
at Parser.pp.parseClass (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/statement.js:567:32)
at Parser.pp.parseStatement (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/statement.js:84:19)
at Parser.parseStatement (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/plugins/flow.js:621:22)
at Parser.pp.parseTopLevel (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/statement.js:30:21)
at Parser.parse (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/parser/index.js:70:17)
at Object.parse (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babylon/lib/index.js:45:50)
at Object.exports.default (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/helpers/parse.js:36:18)
at File.parse (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/transformation/file/index.js:574:40)
at File.parseCode (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/transformation/file/index.js:691:20)
at /Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/transformation/pipeline.js:167:12
at File.wrap (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/transformation/file/index.js:639:16)
at Pipeline.transform (/Users/amaiale/chordb/node_modules/babel-loader/node_modules/babel-core/lib/transformation/pipeline.js:165:17)
我之前没有碰到过这个问题,但之前我只在课堂上宣布了方法。
答案 0 :(得分:4)
我会确保你正确设置了babel。您可能缺少类属性的插件,这是一个实验性功能。
.babelrc
{
"presets": ["react", "es2015"],
"plugins": ["transform-class-properties"]
}
您可以通过npm:npm i -D babel-plugin-transform-class-properties
答案 1 :(得分:1)
您可以像这样编写组件
class ChordFilters extends Component {
constructor() {
super();
this.state = {
value: 'Mandolin',
};
handleChange = (value) => {
this.setState({value: value});
};
state是一个类实例变量。您应该使用构造函数来初始化这些变量。否则你必须使用
{
"plugins": ["syntax-class-properties"]
}
<。>在.babelrc文件中让babel知道属性。