En passant accessoires de Réagir Routeur enfants routes
Je vais avoir de la difficulté à surmonter un problème de réagir routeur. Le scénario est que j'ai besoin de passer les enfants itinéraires d'un ensemble d'accessoires à partir d'un état du composant parent et de l'itinéraire.
ce que je voudrais faire est de passer childRouteA
son propsA
, et passer childRouteB
son propsB
. Toutefois, la seule façon dont je peux comprendre la façon de le faire est de passer RouteHandler
les deux propsA
et propsB
ce qui signifie que chaque enfant route se chaque enfant prop indépendamment de sa pertinence. ce n'est pas un problème de blocage pour le moment, mais je peux voir une fois quand je serais en utilisant les deux de la même composante qui signifie que les touches sur la propA sera écrasé par les touches, les touches de propB.
# routes
routes = (
<Route name='filter' handler={ Parent } >
<Route name='price' handler={ Child1 } />
<Route name='time' handler={ Child2 } />
</Route>
)
# Parent component
render: ->
<div>
<RouteHandler {...@allProps()} />
</div>
timeProps: ->
foo: 'bar'
priceProps: ->
baz: 'qux'
# assign = require 'object-assign'
allProps: ->
assign {}, timeProps(), priceProps()
Cela fonctionne de la manière que je l'attendez. Lorsque je créer un lien vers /filters/time
- je obtenir le Child2
composant de rendu. quand je vais à /filters/price
- je obtenir le Child1
composant de rendu. le problème est qu'en faisant ce processus, Child1
et Child2
sont tous deux passé allProps()
même si ils n'ont besoin que de prix et de délai d'accessoires, respectivement. Cela peut devenir un problème si ces deux éléments identiques prop nom et, en général, n'est tout simplement pas une bonne pratique pour gonfler les composants avec des accessoires inutiles (comme il y a plus de 2 enfants dans mon cas).
donc en résumé, est-il un moyen de passer le RouteHandler
timeProps quand je vais sur le temps de trajet (filters/time
) et passez uniquement priceProps à RouteHandler
quand je vais sur le prix de la route (filters/price
) et pour éviter de passer tous les accessoires pour tous les enfants des routes?
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré un problème similaire et a découvert que vous pouvez accéder à des accessoires fixés sur le
Route
parthis.props.route
dans votre itinéraire composant. Sachant cela, j'ai organisé mes composants comme ceci:index.js
App.js
HelloView.js
C'est à l'aide de réagir-routeur v1.0-beta3. Espérons que cette aide!
Ok, maintenant que je comprends mieux votre problème, voici ce que vous pourriez essayer.
Comme votre enfant les accessoires sont à venir à partir d'un seul parent, votre composant parent, de ne pas réagir-routeur, devrait être celui de la gestion de laquelle l'enfant est rendu, de sorte que vous pouvez contrôler les accessoires sont passés.
Vous pouvez essayer de modifier votre parcours pour utiliser un paramètre, puis vérifiez que le paramètre de votre parent composant de rendre l'enfant approprié du composant.
Route
Composant Parent
this.context.router.getCurrentParams
(cus je ne suis pas à l'aide de la version beta 1.0) et a ensuite fait un objet carte pour passer les accessoires, j'ai besoin pour le gestionnaire d'itinéraire. à partir de là, j'ai utilisé une instruction switch pour obtenir le bon enfant.fruits
tableau ci-dessus? Depuis dans<Router>
l'état de la société mèreApp
n'est pas dans le champ d'application on ne peut pas passer à d'composant dans un sous<Route>
, ou toute référence à un composant enfant dans le parent de l'élément est{this.props.children}
et pas <aComponent data={présent.état.soemPoriton} />` on ne peut pas passer à travers la syntaxe de l'expression{this.props.children}
. Quelle est la prise;?En composant enfant, place de
Vous pouvez fusionner des accessoires avec les parents
Réagir.cloneElement peut être utilisé pour rendre l'enfant du composant et donc de transmettre toutes les données qui est disponible à l'intérieur de l'enfant itinéraire composant qui est défini dans la route.
Par exemple, ici, je suis passant la valeur de l'utilisateur à réagir childRoute composant.