So habe ich eine BaseComponent.jsx
, die ich auf viele meiner Komponenten erweitern. Das funktioniert großartig.React: wie auf Basisklasse von Komponenten höherer Ordnung zugreifen
class BaseComponent extends React.Component {
constructor(props){
super(props)
this.something = true
}
}
class OtherComponent extends BaseComponent {
constructor(props){
super(props)
console.log(this.something) // true
}
}
Aber jetzt brauche ich withRouter(component)
von react-router
zu verwenden, die Ihre Komponente in einer höheren Ordnung Komponente wickelt und schmücken Ihre Klasse. So
ich dies tun:
class OtherComponent extends BaseComponent {
constructor(props){
super(props)
console.log(this.something) // undefined
}
}
export default withRouter(OtherComponent)
Das Problem ist, dass ich jetzt nicht die Eigenschaften von BaseComponent
zugreifen können und diejenigen zurückkehren undefined
.
Wie kann ich das lösen, damit ich ein HoC erstellen und gleichzeitig auf die Eigenschaften der Basisklasse zugreifen kann?
Ich sehe nicht das gleiche Verhalten. Ich habe eine Geige basierend auf deinem Beispiel erstellt und logge richtig "wahr". Fügen Sie hinzu, dass es funktionieren sollte, wie Sie beschrieben haben und wie diese Geige veranschaulicht, da HoCs die komponierte Komponente nicht verändern. https://jsfiddle.net/okpLvu3e/ – ryanjduffy
Hey @RyanDuffy dieses einfache Beispiel funktioniert, aber wenn Sie beginnen, Kinder hinzufügen, usw. tut es nicht. Überprüfen Sie dies: https://github.com/reactjs/react-router/issues/3514 Sie empfehlen einfach nicht, React.Component zu erweitern. – Pier
Können Sie stattdessen mit der Komponentenzusammensetzung erreichen, was Sie wollen? Bei der Entwicklung von React-Komponenten wird von einer Unterklassenbildung abgeraten. – loganfsmyth