私は、ES6クラスが基本的にES5オブジェクトシステムのまわりの構文的砂糖であるという印象を受けています。 私はトランスファーなしでReactを実行しようとしているので、React.Componentから "継承する"オブジェクト "クラス"を定義するために古い構文を使用することができると考えました。Reactで「通常の」ES5プロトタイプ継承を実装する方法は?
var Board = function(props, state) {
var instance = {};
instance.props = props;
instance.context = state;
return(instance);
};
Board.prototype = Object.create(React.Component.prototype);
Board.prototype.render = function() {
return(
// ...stuff
)
};
しかし、それは動作しません!
react.js:20478 Warning: Board(...): No `render` method found on the returned component instance: you may have forgotten to define `render`
react.js:6690 Uncaught TypeError: inst.render is not a function(…)
私は選択肢in this gist、および以下の作品が見つかりました:
var Board = function(props, state) {
var instance = Object.create(React.Component.prototype);
instance.props = props;
instance.context = state;
instance.prototype.render = function() {
return(
// ...stuff
)
};
return(instance);
};
私はReact.createClass
ヘルパーを使用できることも見出しました。
しかし、Reactがこのような一般的な方法で定義されたクラスを処理しない理由を理解したいと思います。 ES6クラスは使用前にインスタンス化されているようです。 ES5スタイルのクラスもインスタンス化されない理由はなく、同様の結果が得られます。
作成し、コンストラクタで 'instance'変数を返さないでください。代わりに 'this'を使用し、何も返しません。 (最初のスニペットでやっていることは、本当にES5のクラスを正しく行っていないのです。) – Frxstrem
私は人々がこの質問をdownvoteしないことを望みます。受け入れられた答えは、私が簡単にウェブ上で見つけることができなかったいくつかの情報と明確な例を提供します。これは、私が作ったエラーにもかかわらず、 "旧式の"オブジェクトを使ってReactを使ってみようとする人にとって、有益な質問かもしれません。 – Rolf
あなたはこの回答を見ているかもしれません:https://stackoverflow.com/questions/43529107/how-does-prototypal-inheritance-in-javascript-really-works –