2017-01-04 10 views
0

Man kann Requisiten an eine Komponente einer untergeordneten Route weitergeben (während React Router verwendet wird), indem die Requisiten an die Komponente Route für die untergeordnete Komponente übergeben werden und in der untergeordneten Komponente darauf zugegriffen wird dieser Route von this.props.route.propName.Requisiten übergeben Router

Was ist mit den Requisiten in einer untergeordneten Komponente ist ein Teil des Zustands der übergeordneten Komponente und nicht nur einige nicht verwandte Daten zu den Komponenten?

Da

  • in <Router /> der Zustand einer Mutter App in ihrem Umfang nicht ist, kann ein Durchlauf nicht zu Komponente in einem Unter <Route /> oder

  • alle Bezugnahme auf eine untergeordnete Komponente in der Elternkomponente ist {this.props.children} und nicht <aComponent data={this.state.somePortion} />, man kann es wiederum nicht durch die Syntax des Ausdrucks {this.props.children} übergeben.

Was ist der Haken?

+0

Haben Sie sich Redux/Flussmittel angesehen? Würde Ihnen wahrscheinlich helfen, dieses Problem viel einfacher zu lösen –

+0

Ja, ich habe sie angeschaut. Da der 'redux store' im oberen Teil der Hauptkomponente und ** durch eine' ' Komponente in der Bindungsbibliothek 'react-redux' bereitgestellt wird, können alle Komponenten in der Routerhierarchie per Status als Props und Zugriff übergeben werden in der Komponente mit 'this.props.route.propName'. Vielen Dank. Aber die Anwendung von Redux auf mein Setup scheint mir etwas schwierig zu sein. Jede Lösung ohne sie. Es muss ein Weg sein, und nicht zu schwerfällig. –

+0

Die Verwendung einiger Utilizers, um das Leben einfacher zu machen, macht manchmal die Leichtigkeit verloren, um die verlorenen Bits wiederzugewinnen, brauchen Sie ein anderes Konstrukt, das Sie potentiell in einem anderen kleinen bis großen Weg einschränken kann. Die Verwendung von React Router macht den Zustand in der obersten Komponente * für die untergeordneten Komponenten in diesem Fall für mich zunächst unpassierbar *. Wie ich die Daten durch die Komponenten fließen lasse, idealerweise mit Props in React.js. Recht? Es muss einen einfachen Weg geben. –

Antwort

0

Aktualisierung: Statt des Speicherstatus innerhalb von App muss Ihr Status in der Komponente gespeichert werden, die die Routen dann an die Route weitergibt. Mit der folgenden Methode können Sie die Komponente umbrechen, wenn sie die aktuelle propType-Liste beibehalten soll. Wenn Sie this.props.route.propName nicht verwenden können, ist eine andere Option die Verwendung einer High-Order Component (HOC), die Ihre Komponente umschließt und auf der Route verwendet. Übergeben Sie dann die Routenrequisiten an die Komponente, die Sie rendern möchten.

Sie könnten dann weitere Erweiterbarkeit können Sie die Komponente übergeben, um auf die Route zu rendern.

<Route to='/about' component={WrappedComponent} data={[]} page={AboutPage} />

Dann so etwas wie diese gewickelte Update:

const WrappedComponent = ({ route }) => { 
    const { page:Component, ...rest } = route; 
    return <Component {...rest} />; 
}; 

Dies etwas ES2015 verwendet + mit dem Rest Operator, würde aber mehr Wiederverwendung auf dieser HOC ermöglichen.

+0

Was ist das HOC? –

+0

HOC oder High Order Komponente ist eine Komponente, die einfach eine andere Komponente umschließt. Sie sind in solchen Fällen äußerst nützlich, in denen Sie Logik vorführen müssen, aber diese Logik nicht zu der inneren Komponente hinzufügen wollen, die dazu neigt, die innere Komponente wiederverwendbar zu machen. – kwelch

+0

Agian Wie kann man den Zustand erreichen, der in der obersten Komponente dieses Konstrukts liegt? Der Status befindet sich in der Komponente "App". Routen Hierarchie wie folgt: ' ' –

Verwandte Themen