2016-07-31 6 views
0

リアクションecma6 dosentはセッターなしでゲッターを定義できるようです ゲッターのみメソッドを定義し、他の方法で値を変更する方法はありますか?セッターなしのゲッターを定義するecma6 - 反応

import React from 'react'; 
export default class GetterOnly extends React.Component { 
    constructor(props) { 
     super(props); 
     this._is_on = false; 
    } 

    on() { 
     this._is_on = true; 
    } 

    get is_on() { 
     return this._is_on; 
    } 

    render() { 

    } 
} 
var _getter = new GetterOnly() 
_getter.on(); 

Uncaught TypeError: Cannot set property is_on of #GetterOnly which has only a getter

patchProperty @ makeAssimilatePrototype.js:21 (anonymous function) @ makeAssimilatePrototype.js:52 (anonymous function) @ makeAssimilatePrototype.js:51 reconcileWithStoredPrototypes @ makeAssimilatePrototype.js:50 assimilatePrototype @ makeAssimilatePrototype.js:63 patchReactClass @ makePatchReactClass.js:40 makeHot @ makeMakeHot.js:33 makeExportsHot @ makeExportsHot.js:44 (anonymous function) @ GetterOnly.js:139 (anonymous function) @ GetterOnly.js:139 (anonymous function) @ GetterOnly.js:140 (anonymous function) @ app.js:5062 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ page.js:35 (anonymous function) @ page.js:81 (anonymous function) @ page.js:82 (anonymous function) @ app.js:5056 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ Routes.js:19 (anonymous function) @ Routes.js:52 (anonymous function) @ Routes.js:53 (anonymous function) @ app.js:4438 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ makoVOD.js:19 (anonymous function) @ makoVOD.js:62 (anonymous function) @ makoVOD.js:63 (anonymous function) @ app.js:1042 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ multi_main:3 (anonymous function) @ app.js:586 webpack_require @ app.js:556 (anonymous function) @ app.js:579 (anonymous function) @ app.js:582

+2

いいえ、構文エラーではありません。エラーメッセージは、何かがsetterなしで例外をスローする '.is_on'に代入しようとしたことを示唆しています。エラーのスタックトレースを調べて、どこから来ているかを確認します。 – Bergi

+0

これはコードの簡略化されたバージョンであり、それでもエラーが表示されます: 'import React from 'react'; クラスGetterOnlyはReact.Componentを拡張します。{ \tコンストラクタ(小道具){ \t \t super(props); \t \t}; \t \t GET is_on(){ \t \t戻りthis._is_on。 \t}; \t render(){ \t}; } デフォルトのGetterOnlyをエクスポートします。 –

+0

これはインポート/エクスポートモジュールに問題があるようです。 –

答えて

-4

問題は、関数としてonを呼んでいるということです。ゲッターは、プロパティのような機能を見て作る:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

最後の行は_getter.onの代わり_getter.on()でなければなりませんように。また

_is_on変数民間ようにように、あなたは、クラスの外でそれを定義することができようにする:

import React from 'react'; 

let _is_on = false; 

export default class GetterOnly extends React.Component { 
    constructor(props) { 
     super(props); 
    } 

    on() { 
     _is_on = true; 
    } 

    get is_on() { 
     return _is_on; 
    } 

    render() { 

    } 
} 
var _getter = new GetterOnly() 
_getter.on; 

今誰が、クラスの変数を編集することはできません。

+1

onは実際にメソッドであり、呼び出す必要があります。 'let _is_on = false;'はすべてのインスタンス間でこのフラグを共有します。 –

0

問題はReact/Es6の責任でした。それはnodejs - webpack.hot ...モジュールから来ているように見えましたが、私はこれを使ってコードを自動生成しました。 私はvesion:2.0.0-alphaにアップグレードしましたが、エラーは消えました。 既知の問題点 - https://github.com/gaearon/react-hot-loader/issues/131

関連する問題