Ich verstehe, dass meine Frage ein wenig voreingenommen ist, aber ich bin sehr neu in Javascript und prototypes
, und ich lese darüber, aber ich verstehe nicht wirklich, wie diese Techniken auf meine Anwendung praktische Probleme. Ein Beispiel wäre also sehr hilfreich. Also ich habe eine React
Komponente, das sieht im Grunde wie folgt aus:Korrekter Weg zu erben React Komponenten
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>)
});
Ich habe Component2
auch die im Grunde absolut die gleiche ist, hat aber einen zusätzlichen <input/>
innerhalb des return
seiner render
Funktion.
Ich habe auch Component3
, die die gleichen Funktionen teilt, aber hat unterschiedliche render()
Funktion.
Also, wie Vererbung hier anwenden und Copy-Paste 3 Mal vermeiden? Ich vermisse einfach eine praktische Illustration, also würde ich es begrüßen.
Edit1____________________________________________________ Also habe ich versucht Prototype Erbe nach der ersten Antwort zu implementieren, aber es scheint nicht reagiert, diese Funktionen sehen: getInitialState()
ist null, der Anfangszustand ist null nach dem Rendern. Was ist falsch an diesem Ansatz?
Ich versuchte auch nach dem Lehrbuch zu gehen und tat
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());
Aber wenn ich meinen Browser zu öffnen, bekomme ich einen Fehler: Uncaught Invariant Violation: createClass(...): Class specification must implement a
machen method.
Was ich auf diese Weise falsch mache?
Edit2_______________________________________________
Eigentlich sehe ich das nicht reagiert Mixins weder Prototypen unterstützen. Die Zusammensetzung sollte stattdessen verwendet werden. Es wird in diesem Artikel erläutert: Dan Abramov's article Mixins Are Dead. Long Live Composition
Unglaublich, beantworteten Sie meine Post :) Ich habe heute Ihre Artikel gefunden und so ziemlich die gleiche Folge, so herum rumspielen mit Zusammensetzung dieser Nacht, brauchte nur ein paar praktische Beispiele mehr. Danke für diese Erklärung und für Ihre Arbeit! Ich benutze Redux ausgiebig und bin sehr glücklich damit. –
Normalerweise extrahiere ich Komponenten ausgiebig, so dass mein Code den 'render' Teil nicht wiederholt. Was ich brauchte, ist tatsächlich die Art und Weise, den gleichen Code für 'getInitialState' und andere Funktionen, die die gleichen sind, zu teilen. Das versuche ich jetzt. –
Was ist Ihr Anwendungsfall für die Freigabe von Code in 'getInitialState'? –