比方說,我有一個富組件與一些陣營路由器導航:與擴展成分發生化學反應路由器
var Foo = React.createClass({
render: function() {
return (<div>
<Link to="/foo/1">1</Link>;
<Link to="/foo/2">2</Link>;
{this.props.children}
</div>);
}
});
var Foo1 = React.createClass({
render: function() {
return <p>foo 1</p>;
}
});
var Foo2 = React.createClass({
render: function() {
return <p>foo 2</p>;
}
});
ReactDOM.render((
<Router>
<Route path="/" ...>
<Route path="foo" component={Foo}>
<Route path="1" component={Foo1} />
<Route path="2" component={Foo2} />
</Route>
</Route>
</Router>
), document.getElementById('main'));
現在,讓我們說,我也有一個酒吧組成部分,這是非常相似的(除了,還有,bar
代替foo
)。在「經典」陣營的應用,我會「提取」普通邏輯的,就像這樣:
var Element = React.createClass({
render: function() {
return (<div>
<Link to={this.props.url + '/1'}>1</Link>;
<Link to={this.props.url + '/2'}>2</Link>;
{this.props.children && React.cloneElement(this.props.children {
name: this.props.name // Ugly hack to propagate props...
})}
</div>);
}
});
var Element1 = React.createClass({
render: function() {
return <p>{this.props.name} 1</p>;
}
});
var Element2 = React.createClass({
render: function() {
return <p>{this.props.name} 2</p>;
}
});
var Foo = React.createClass({
render: function() {
return <Element url="/foo" name="foo" />;
}
});
var Bar = React.createClass({
render: function() {
return <Element url="/bar" name="bar" />;
}
});
正如你所看到的,我已經幾乎得到它(甚至是醜陋的道具傳播的黑客行爲。 ..)。我缺少的部分是如何定義的路由本身:
ReactDOM.render((
<Router>
<Route path="/" ...>
<Route path="foo" component={Foo}>
<Route path="1" component={?} />
<Route path="2" component={?} />
</Route>
</Route>
</Router>
), document.getElementById('main'));
我的意思是,不再有Foo1
和Foo2
成分,因爲富有Element
,從它們一般的。當然,我可以明確地定義Foo1
以使Element1
和Foo2
具有Element2
,但是然後我必須實施Foo
而不是讓Element
爲我做;或者也許我可以通過組件本身的道具(即Foo = ... <Element ... component1={Foo1} component2={Foo2} />
...但是然後呢?)。
所以:我如何能達到這種陣營,白條「通過組成繼承」與之反應路由器上的?或者有另一種方法可以做到這一點?