Ich habe (z. B.) zwei Komponenten in React. Die erste, app.js
, ist die Wurzelkomponente. Es importiert einige JSON
-Daten und legt sie in ihrer state
ab. Das funktioniert gut (ich kann es in den React Devtools sehen).
import data from '../data/docs.json';
class App extends Component {
constructor() {
super();
this.state = {
docs: {}
};
}
componentWillMount() {
this.setState({
docs: data
});
}
render() {
return (
<Router history={hashHistory}>
<Route path="/" component={Wrapper}>
<IndexRoute component={Home} />
<Route path="/home" component={Home} />
<Route path="/docs" component={Docs} />
</Route>
</Router>
);
}
}
Das zweite, docs.js
, soll diese JSON
-Daten anzeigen. Dazu muss auf die state
von app.js
zugegriffen werden. Im Moment ist es fehlerhaft und ich weiß warum (this
enthält app.js
nicht). Wie kann ich dann die state
von app.js
an docs.js
übergeben?
class Docs extends React.Component {
render() {
return(
<div>
{this.state.docs.map(function(study, key) {
return <p>Random text here</p>;
})}
</div>
)
}
}
Der richtige Weg, dies zu tun, wäre, den Zustand als props
an die Docs
-Komponente zu übergeben.
Da Sie jedoch React Router
verwenden, kann auf andere Weise darauf zugegriffen werden: this.props.route.param
anstelle des Standardwerts this.props.param
Ihr Code sollte also ungefähr so aussehen:
<Route path="/docs" component={Docs} docs={this.state.docs} />
und
{this.props.route.docs.map(function(study, key) {
return <p>Random text here</p>;
})}
Eine andere Möglichkeit, dies zu tun, ist:
<Route path="/docs" component={() => <Docs docs={this.state.docs}/>}>
Wenn Sie Kinder übergeben müssen:
<Route path="/" component={(props) => <Docs docs={this.state.docs}>{props.children}</Docs>}>
Wenn Sie dies so tun, können Sie auf Ihre Requisitenwerte direkt über this.props.docs
in Child Component zugreifen:
{
this.props.docs.map((study, key)=> {
return <p key={key}>Random text here</p>;
})
}
Eine andere Möglichkeit, dies zu tun, wird sein
<Route path='/' render={ routeProps => <Home
{...routeProps}
docs={this.state.docs}
/>
}
/>
In der untergeordneten Komponente können Sie mit auf docs
zugreifen
this.props.docs
Ich hoffe es hilft!