【发布时间】:2016-01-28 06:41:19
【问题描述】:
我有四个组件: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 的三个组件,问题是这些组件需要对彼此的事件做出反应。
目前有以下几点:
- 我无法创建另一个中介组件来控制这三个部分组件,因为在渲染之前我将无法访问它的 API(因此我无法实现 getter 方法,例如 getHeader())。
- 我可以将它们全部连接到 redux,但接缝太复杂了。
- 另一种解决方案是创建非 React 对象来共享状态,但在这种情况下,我需要在此对象之后进行清理以克服内存泄漏。与 redux 的连接也会很棘手。这种方法在我看来不是那么干净。
- 我也可以用透明背景作弊,这样我就可以有一个
Panel,也可以有多个PanelHeaders等等。但是在这种情况下,我需要将有关动画的知识传播给所有子组件。
有没有人知道在 React 中有任何其他方法可以做到这一点?或者我应该从以上几点中选择一个?
【问题讨论】:
-
把这个评论留给来这里的人,试图决定是否使用 Redux,一般来说。我发现使用 npx create-react-app my-app --template redux 安装的 create react app 模板对学习 redux 非常有帮助。
标签: reactjs