Ich bin auf ein Problem, weil ich eine ziemlich komplexe Komponente habe, die eine Liste von Elementen rendert. Die Liste der Elemente wird direkt aus dem Redux-Statusbaum übernommen. Ich möchte zwei separate Routen haben, die dieselbe Komponente wiederverwenden, aber jede von ihnen wird mit einer anderen Liste aus der Statusbaumstruktur verbunden. HierWiederverwendung von react/redux Komponente auf verschiedenen Routen verbunden mit verschiedenen Teil des Staates
ist ein vereinfachtes Beispiel:
Beginnend mit dem Zustand Baum:
state = {
fruits: ['apple', 'banana', 'grape', 'pear'],
vegetables: ['celery', 'carrot', 'cucumber']
}
und einer einfachen Auflistung Komponente
class ListView extends Component {
render() {
return (
<div>
{this.props.items.map((item, index) =>
<div key={index}>{item}</div>
)}
</div>
)
}
}
function mapStateToProps(state) {
return {
items: state.fruits
}
}
export default connect(mapStateToProps)(ListView)
Die höhere Ebene App-Komponente wie folgt aussieht:
class App extends Component {
render() {
return (
<div>
{this.props.children}
</div>
)
}
}
export default connect()(App)
Und die Routen wie folgt aussehen:
<Route path='/' component={App}>
<IndexRedirect to='fruits' />
<Route path='fruits' component={ListView} />
<Route path='vegetables' component={ListView} />
</Route>
So jetzt die Listview-Komponente wird an den Früchten Teil des redux Zustand verbunden. Allerdings würde ich gerne die Routenstruktur hier verwenden, so dass '/ fruits' und '/ vegetables' beide dieselbe Komponente verwenden, aber '/ fruits' listet die Früchte auf, während '/ vegetables' das Gemüse auflistet.
Die naheliegende Arbeit besteht darin, eine vollständig neue und identische Komponentenklasse zu erstellen und die mapStateToProps-Methode zu ändern, um eine Verbindung zum Gemüsesatz herzustellen.
Gibt es eine Möglichkeit, diese Komponente wiederzuverwenden, aber Zugriff auf verschiedene Teile der jeweiligen Statusbaumstruktur zu haben?
ein Update auf meine Antwort Hergestellt unter Verwendung der Komponenten in Ihrem Router enthalten. –