Jede reagieren Komponente wird durch die folgende Funktion übergeben, in node_modules ReactElement.js gefunden:Ist this.props.children für <Route> anders als andere React Components?
ReactElement.createElement = function (type, config, children){
.
.
.
}
Dazu gehört auch <Route>
und <Router>
. Betrachten Sie den folgenden JSX-Code von einem React Tutorial:
<Router history={hashHistory}>
<Route path="/" component={Layout}>
<IndexRoute component={Featured} />
<Route path="Settings" component={Settings} />
<Route path="Archives" component={Archives} />
</Route>
</Router>
Der obige Code wird in den Code transpiled wird unter Verwendung von Babel gezeigt:
"use strict";
React.createElement(
Router,
{ history: hashHistory },
React.createElement(
Route,
{ path: "/", component: Layout },
React.createElement(IndexRoute, { component: Featured }),
React.createElement(Route, { path: "Settings", component: Settings }),
React.createElement(Route, { path: "Archives", component: Archives })
)
);
Von diesem Code, die "Kinder" der äußeren <Route>
sind die innere 3 <Route>s
. Wir wissen, dass:
<MyContainer>
<MyFirstComponent />
<MySecondComponent />
</MyContainer>
class MyContainer extends React.Component{
render(){
return (
.
.
//This will be MyFirstComponent or MySecondComponent
{this.props.children}
.
.
);
}
}
Aber das gleiche gilt für die <Route>s
nicht wahr ist. Der Wert this.prop.children
für den JSX-Router-Code gilt für die component
-Prop, aber nicht für den Router selbst. Warum ist dieses Verhalten von this.props.children für <Route>
anders als für jede andere ReactComponent?
Danke für die Erklärung des "warum". Bevor ich diese Antwort akzeptiere, könnten Sie bitte den Code in react hinzufügen, in dem this.props.children der Komponente der Route zugewiesen ist? –
@AjayH Es sieht so aus, als ob das in der 'render' Methode von [' RouterContext'] passiert (https://github.com/ReactTraining/reac- torrouter/blob/v3.0.1/modules/RouterContext.js). –