此 class 声明中使用的 Javascript 的形式是什么?
What is the form of Javascript used in this class declaration?
这是来自 React-toolbox 的 table example(可以使用标签)
class TableTest extends React.Component {
state = { selected: [], source: users };
handleSelect = (selected) => {
this.setState({selected});
};
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source}
/>
);
}
}
这对我来说不能用 webpack/babel 编译,但下面的 'correct' Javascript 可以。这是 JSX 表示法和我没有像我想的那样转译 JSX 的标志吗?
class TableTest extends React.Component {
constructor() {
super();
this.state = { selected: [], source: users };
this.handleSelect = (selected) => {
this.setState({selected});
};
}
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source} />
);
}
}
Webpack/babel 窒息:
ERROR in ./src/client/app/app.jsx
Module build failed: SyntaxError: Unexpected token (21:8)
19 |
20 | class TableTest extends React.Component {
> 21 | state = { selected: [], source: users };
这是在使用 class properties, which are currently part of Babel's stage 2 preset。
对于此代码,class 主体中的 =
语句将通过 class 属性转换移动到构造函数中。
Here's the original code in the Babel REPL with suitable presets applied.
您需要将此预设(或较低阶段预设,因为所有 Babel 阶段预设还包括较高阶段功能)添加到您的 Babel 配置,或单独向其添加转换插件。
示例 Babel 配置将提供转译原始代码所需的所有功能:
{
presets: ['es2015', 'react', 'stage-2']
}
它在 class 内的 =
声明中抛出错误。由于 React 没有自动绑定规则,您需要将 this
绑定到 handleSelect
。
https://facebook.github.io/react/docs/reusable-components.html#no-autobinding
class TableTest extends React.Component {
constructor(props) {
super(props);
this.state = {
selected: [], source: users
};
this.handleSelect = this.handleSelect.bind(this);
}
handleSelect(selected) {
this.setState({selected});
}
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source}
/>
);
}
}
这是来自 React-toolbox 的 table example(可以使用标签)
class TableTest extends React.Component {
state = { selected: [], source: users };
handleSelect = (selected) => {
this.setState({selected});
};
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source}
/>
);
}
}
这对我来说不能用 webpack/babel 编译,但下面的 'correct' Javascript 可以。这是 JSX 表示法和我没有像我想的那样转译 JSX 的标志吗?
class TableTest extends React.Component {
constructor() {
super();
this.state = { selected: [], source: users };
this.handleSelect = (selected) => {
this.setState({selected});
};
}
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source} />
);
}
}
Webpack/babel 窒息:
ERROR in ./src/client/app/app.jsx
Module build failed: SyntaxError: Unexpected token (21:8)
19 |
20 | class TableTest extends React.Component {
> 21 | state = { selected: [], source: users };
这是在使用 class properties, which are currently part of Babel's stage 2 preset。
对于此代码,class 主体中的 =
语句将通过 class 属性转换移动到构造函数中。
Here's the original code in the Babel REPL with suitable presets applied.
您需要将此预设(或较低阶段预设,因为所有 Babel 阶段预设还包括较高阶段功能)添加到您的 Babel 配置,或单独向其添加转换插件。
示例 Babel 配置将提供转译原始代码所需的所有功能:
{
presets: ['es2015', 'react', 'stage-2']
}
它在 class 内的 =
声明中抛出错误。由于 React 没有自动绑定规则,您需要将 this
绑定到 handleSelect
。
https://facebook.github.io/react/docs/reusable-components.html#no-autobinding
class TableTest extends React.Component {
constructor(props) {
super(props);
this.state = {
selected: [], source: users
};
this.handleSelect = this.handleSelect.bind(this);
}
handleSelect(selected) {
this.setState({selected});
}
render () {
return (
<Table
model={UserModel}
onSelect={this.handleSelect}
selectable
multiSelectable
selected={this.state.selected}
source={this.state.source}
/>
);
}
}