Reactには(たとえば)2つのコンポーネントがあります。最初のapp.js
は、ルートコンポーネントです。いくつかのJSON
データをインポートし、state
に入れます。これは正常に機能します(React devtools)で確認できます)。
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>
);
}
}
2番目のdocs.js
は、このJSON
データを表示するためのものです。そのためには、app.js
のstate
にアクセスする必要があります。現時点ではエラーになっており、その理由はわかっています(this
にはapp.js
が含まれていません)。しかし、どのようにしてstate
をapp.js
からdocs.js
に渡すことができますか?
class Docs extends React.Component {
render() {
return(
<div>
{this.state.docs.map(function(study, key) {
return <p>Random text here</p>;
})}
</div>
)
}
}
これを行う適切な方法は、状態をprops
としてDocs
コンポーネントに渡すことです。
ただし、React Router
を使用しているため、少し異なる方法でアクセスできます。デフォルトのthis.props.route.param
の代わりにthis.props.param
そのため、コードは次のようになります。
<Route path="/docs" component={Docs} docs={this.state.docs} />
そして
{this.props.route.docs.map(function(study, key) {
return <p>Random text here</p>;
})}
これを行う別の方法は次のとおりです。
<Route path="/docs" component={() => <Docs docs={this.state.docs}/>}>
子供を渡す必要がある場合:
<Route path="/" component={(props) => <Docs docs={this.state.docs}>{props.children}</Docs>}>
このように実行している場合、子コンポーネントのthis.props.docs
を使用してprops値に直接アクセスできます。
{
this.props.docs.map((study, key)=> {
return <p key={key}>Random text here</p>;
})
}
これを行う別の方法は
<Route path='/' render={ routeProps => <Home
{...routeProps}
docs={this.state.docs}
/>
}
/>
子コンポーネントでは、次を使用してdocs
にアクセスできます
this.props.docs
それが役に立てば幸い!