私の質問はちょっと偏っていると私は理解していますが、私はJavascriptとprototypes
で非常に新しく、読んだことがあります。実用上の問題。したがって、例が非常に役立つでしょう。 だから私は基本的にそのようになっていること、React
コンポーネントを持っている:Reactコンポーネントを継承する正しい方法
var Component1 = React.createClass({
getInitialState: function() {
return ({
searchable: true,
})
},
function1: function() {
return ({
somevalue
})
},
render: function() {
var redText = {
color: 'red'
};
var redBorder = {
color: 'red',
border: '1px solid red'
};
return (
<form>
<div>
<a onClick={this.props.handleAddClick}>Something</a>
</div>
<div>
<label>Some label</label>
<input type="text"/>
</div>
</form>)
});
私も絶対に基本的には同じであるが、そのrender
機能のreturn
内側に一つの追加<input/>
を持ってComponent2
を持っています。
私は同じ機能を共有するComponent3
も持っていますが、異なるrender()
機能を持っています。
ここで継承を適用し、コピー貼り付けを3回回避するにはどうすればよいですか?実用的なイラストが欠けているので、私はそれを感謝します。 Edit1____________________________________________________
は、だから私は、最初の答えは1としてプロトタイプ継承を実装しようとしたが、これらの機能は表示されませんリアクトようだ:getInitialState()
がnullの場合、初期状態では、レンダリング後のnullです。このアプローチで何が問題になっていますか?
私はまた、教科書に応じて行くことにしようとしたとしました:
function MyPrototype() {};
MyPrototype.prototype.getInitialState = function() {
return ({
someProperty: true;
})
};
function Component1() {};
Component1.prototype = Object.create(MyPrototype.prototype);
Component1.prototype.render = function() {
console.log(this);
return (<div></div>)};
var MyComponent1 = React.createClass(new Component1());
しかし、私は私のブラウザを開くと、私はエラーを取得する:Uncaught Invariant Violation: createClass(...): Class specification must implement a
method.
をレンダリング私は間違ってこの方法を何をしているのですか?
Edit2_______________________________________________
は実は、私はミックスインにどちらのプロトタイプをサポートしていない反応することを参照してください。代わりに合成を使用する必要があります。 Dan Abramov's article Mixins Are Dead. Long Live Composition
あなたは私の記事に答えました:)私は今日、あなたの記事を見つけて、かなり同じ結果を得ました。この説明とあなたの仕事に感謝します!私はReduxを広範囲に使用しており、本当に満足しています。 –
通常、コンポーネントを広範囲に抽出するので、私のコードは 'render'部分を繰り返さないようにします。私が必要としたのは、実際には、同じコードを 'getInitialState'と他の同じ機能を共有する方法です。それが今私が試みていることです。 –
'getInitialState'でコードを共有するためのユースケースは何ですか? –