以下のバージョンで動作確認してます。
- react: 15.4.1
- react-router: 3.0.0
例えばこんなRoutesを定義していて、 Parent
コンポーネントから Child
コンポーネントをpropsとして渡したいとします。
<Router history={browserHistory}>
<Route path="/" component={Parent}>
<Route component={Child} />
</Route>
</Router>
普通ならParent
コンポーネント内で以下のように子コンポーネントを呼び出します。
{this.props.children}
ただ、このままではpropsを渡せません。
ですが以下のように React.cloneElement
を使うことによってpropsを渡すことができます。
{React.cloneElement(this.props.children, {
props_to_pass: this.state.props_to_pass
})}
やっていることは、 this.props.children
を React.cloneElement
でクローンしたオブジェクトを作成し、
それに対してpropsを適用しています。
なるべく状態は一つのコンポーネントにまとめたい、と感じることは多々あると思いますので、そんな時に便利です。
ただ、いかんせんあんまり美しくない方法なので、もしこれより綺麗なやり方があればお教えいただけると嬉しいです。