Ich lerne gerade React und ich schreibe Komponenten mit ES7-Syntax. Meine Idee ist es, eine Basiskomponente zu erstellen, die einige Methoden enthält, die alle abgeleiteten Komponenten haben sollen. Zum Beispiel möchte ich valueLink without the mixin implementieren, für die Zwei-Wege-Bindung in allen meinen Komponenten. Hier ist meine Idee:Ist es eine gute Übung, Basiskomponenten zu erstellen und sie dann in React zu erweitern?
class MyComponent extends React.Component {
bindTwoWay(name) {
return {
value: this.state[name],
requestChange: (value) => {
this.setState({[name]: value})
}
}
};
}
class TextBox extends MyComponent {
state = {
val: ''
};
render() {
return (<div>
<input valueLink={this.bindTwoWay('val')}/>
<div>You typed: {this.state.val}</div>
</div>)
}
}
Und es funktioniert gut. Ich konnte jedoch nicht viele Informationen über diese Methode finden. Es geht nicht um ValueLink, das war nur ein Beispiel. Die Idee ist, einige Methoden in einer Basiskomponente zu haben und diese Komponente später zu erweitern, so dass abgeleitete Komponenten alle diese Methoden haben, wie die übliche OOP-Methode. Also würde ich gerne wissen, ob das vollkommen in Ordnung ist oder ob mir ein paar Fehler bekannt sind. Vielen Dank.
Die meisten Leute würden "Nein" sagen. Zusammensetzung vor Vererbung bevorzugen. Dies funktioniert jedoch nicht immer, Ihr Fall könnte einer dieser Fälle sein. * "oder es gibt einige Fehler" * Der größte Unterschied zwischen Vererbung und Mixins ist, dass eine Klasse viele Mixins verwenden kann, aber sie kann nur einen Elternteil haben. Das macht die Vererbung viel weniger flexibel. –
+1 zu @FelixKling, Zusammensetzung über Vererbung wo möglich. Ich würde lieber eine Komponente sehen, die etwas wie const bindTwoWay = require ("../ mixins/bindTwoWay") explizit ausführt, als etwas in einer verschachtelten Hierarchie zu jagen. –
@FelixKling Ich sehe Ihren Punkt, aber immer noch, auch wenn Klasse kann ein Elternteil haben, und wenn ich wirklich nur einen Elternteil brauche, wäre dies immer noch eine feine Sache zu tun, nicht wahr? Da wir Mixins nicht mit ES6 Syntax verwenden können ... – tuks