2016-09-22 10 views
1

これは、これは私のためのWebPACK /バベルでコンパイルされませんが、次の「正しい」Javascriptがないtable exampleからリアクト・ツールボックスを(タグを使用することができる)このクラス宣言で使用されるJavascriptの形式は何ですか?

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} 
     /> 
    ); 
    } 
} 

からです。この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 /バベルがオンにチョーク:

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 }; 

答えて

1

これは、現在バベルのstage 2 presetの一部であるclass propertiesを、使用しています。

このコードの場合、クラス本体内の=ステートメントは、クラスプロパティー変換によってコンストラクターに移動されます。

Here's the original code in the Babel REPL with suitable presets applied

Babelの設定にこのプリセット(またはすべてのBabelステージプリセットにはより高いステージの機能も含む)を追加するか、個別にトランスフォームプラグインを追加する必要があります。すべての機能を提供する

例バベルの設定は、元のコードをtranspileする必要があります:それはクラスの内部で=宣言でエラーを投げ

{ 
    presets: ['es2015', 'react', 'stage-2'] 
} 
+0

感謝。私はステージプリセットをインストールする必要がありました(ステージ0は標準的ですが、私はなぜそれが危険だと思いますか)、それを.babelrcに追加します。 –

+0

@bp:ステージのプリセットは、[新しいJS言語機能を提案するプロセスのさまざまな段階](https://github.com/tc39/proposals)に対応しています。ステージ0はまったく新しいアイデアです。ステージ4は、次のバージョンのJavaScriptに確実に含まれる機能です。明らかに多くの初期段階の提案は放棄されるか却下されるので、それはトレードオフです - ステージ0のプリセットであればすべて*を得ることができますが、使用する機能の一部が終了する危険性があります将来は標準ではない。 –

-1

。 ReactのautobindingルールなしのためにthishandleSelectにバインドする必要があります。

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} 
     /> 
    ); 
    } 
} 
+0

チル@クイル私は1つを追加しました – Lottamus

+0

私の質問は、最初の例がうまくいかなかった理由と実際にはどのような表記でしたかについてでした。私は_make_下の正しい例で動作することができますが、何がうまくいかないのか理解したかったのです。 –

+0

@bp es6コンポーネントには自動バインディングがありません。 'this'を関数にバインドする場合は、コンストラクタでこれを行う必要があります – Lottamus

関連する問題