var A = { doStuff (){} } var B = { doStuff (){} } var C = React.createClass({ mixins: [A, B] }); //... , React doStuff
さらに、ミックスインでは、メソッドオーバーライドのような標準的なOOP連続チップを作成できません。
var A = { doStuff (){} } var C = React.createClass({ mixins: [A], doStuff (){ //, } });
もちろん、これがなければ、機能の拡張は「アダルト」OOP言語のようには機能しません。
doStuff (){ super.doStuff() // }
もちろん、ES6クラスはこの問題を解決し、ReactJSチームはブログの投稿から判断してこれを準備していますが、ES6は再来するのを待たなければならず、ES6サポートのない古いInternet Explorerがなくなるまで待たなければなりません
そこで、私自身が使用する別の方法を提供したいのですが、そのためには次のものが必要になります。
1)モジュール/依存関係のシステム:RequireJS / Browserify / WebPack /これはまだそこにあります。 JavaScriptモジュールを使用していない/わからない場合は、今すぐ調べてください 。
2)jQuery.extend、_。extendなど、オブジェクトのディープコピー用の関数/ lib
そこで、次のようにコンポーネントのモジュールを作成します。
var React = require('react'); var Human = { whoAreYou (){ return "I'm a human"; } whatDoYouDo (){ return "I'm just chilling"; } render (){ return ( <h1>{this.whoAreYou()}<small>{this.whatDoYouDo()}</small></h1> ) } } module.exports = { Class: Human, Component: React.createClass(Human) }
秘Theは、コンポーネントだけでなく、このコンポーネントの作成元の「クリーン」オブジェクトもエクスポートすることです。そのため、<Human />コンポーネントのみを使用する必要がある場合、モジュールのエクスポートからComponentフィールドを取得します。
var Human = require('human').Component;
しかし、モジュールから継承する必要があり、ここで楽しい部分が始まる場合、クラスフィールドを使用します。
var React = require('react'); var Parent = require('human').Class; var Programmer = {}; jQuery.extend(true, Programmer, Parent, { whoAreYou (){ return Parent.whoAreYou.apply(this) + " and a programmer";// ! } whatDoYouDo (){ // return "I write code"; } drinkCoffee (){ // console.log('*sip*'); } });
当然、上記の「慣習」に従ってこのモジュールもエクスポートします。
module.exports = { Class: Programmer, Component: React.createClass(Programmer) }
そして今、それはアプリケーションで使用することができます:
var Programmer = require('programmer').Component;
まあ、または、たとえばJuniorDeveloperでさらに継承/展開します。
それだけです。ReactJSでの(疑似)継承のための松葉杖についての私の短い投稿でした。 紳士の皆さん、成功した週を過ごしてください!