我有四个组成部分:Panel
,PanelHeader
,PanelBody
,PanelFooter
它们的组成如下:
<Panel>
<PanelHeader>
some title
</PanelHeader>
<PanelBody>
<div>
main content
</div>
</PanelBody>
<PanelFooter>
footer content
</PanelFooter>
</Panel>
我也有多条路线,我希望看到Panel
,但内容不同。
一个明显的解决方案是为每个路由创建组件,每个组件都有自己的Panel
。
但在我的情况下,我想在路线之间添加一些变形动画(改变面板的高度,滑动体,淡化页脚等)。为实现此目的,我需要将所有内容呈现为完全相同的Panel
,PanelHeader
,PanelBody
,PanelFooter
实例,因此上述解决方案将无效。
所以我需要将路由组件拆分为每个PanelXXX
的三个组件,问题是这些组件需要对彼此的事件做出反应。
到目前为止,有以下几点:
Panel
但是多个PanelHeader
等等。但在这种情况下,我需要将有关动画的知识传播给所有子组件有人知道在React中做任何其他方法吗?或者我应该从以上几点中选择一个?
答案 0 :(得分:0)
听起来您可以使用this.props.children
。
路由器
<Router history={createBrowserHistory()}>
<Route path="/" component={App}>
<IndexRoute component={DefaultView} />
<Route path="foopath" component={FooView} />
<Route path="barpath" component={BarView} />
</Route>
</Router>
App.js
...
render: function() {
return (
<Panel>
{this.props.children}
</Panel>
);
}
...
DefaultView.js
render: function() {
<div>
<PanelHeader>
FooHeader
</PanelHeader>
<PanelBody>
FooContent
</PanelBody>
<PanelFooter>
FooFooter
</PanelFooter>
</div>
}
您可以详细了解React的儿童 here。
答案 1 :(得分:0)
我认为您描述的场景和您提出的问题是使用Flux的确切合理化。 Redux是一种选择。我们使用原始的Facebook库使用普通的Flux Flux实现,我们取得了巨大的成功。它有一个陡峭的学习曲线,但是一旦你了解它,你面临的问题恰好适合基础设施。