2017-05-05 67 views
0

当在组件层次结构中彼此距离很远的两个元素之间传递数据时,通过道具传递数据可能非常乏味。在这些用例中,我使用Redux仅仅是因为它跟踪大量组件时的情况。使用闭包来封装React组件的状态

我在一个小项目中所做的就是使用闭包来封装状态并导出该变量并在其他地方使用它。我觉得这是一个反模式,但它确实有效。

它的工作方式是声明一些将在组件内被修改的变量。这个变量是从其他地方导入并从其他地方消耗的。

这里是一个小样本与我在做什么(假装有一个大的组件层次结构):https://codesandbox.io/s/2R9RvYkN1

所以我的问题是:有没有更好的方法来达到同样的效果?我们是否应该为这些用例使用Flux实现?只是通过大量层次的组件传递道具是否可行?

+0

您应该在SO帖子中分享代码模式并附上一个具体示例。 – vijayst

+0

如果您使用Redux,则不需要设置选定的颜色。 'ColorSelector'会派发一个动作来更新状态,所选的颜色会自动更新而不需要用户点击一个按钮。 – adrice727

回答

0

正如你自己所说的,通过提供一个对你的应用程序全局的“应用程序状态”,允许你连接你想要的状态的任何组件,

你的“封闭”仅仅是一个穷人的Redux,它也是一个全球性的国家,只是它缺少Redux提供的任何功能(除非你专门写它们)。

让我们CompA需要重新渲染基于CompB上的点击事件,你如何自动做一个闭包?您必须添加侦听器,检查相关状态是否已更改,然后再重新渲染。

所有这些事情都是由Redux免费完成的,所以我没有看到任何额外的好处(除非不使用redux,这可能是它自己的好处)。

如果重要的是不使用redux,这可能是“很好”,但非常危险,我会说它不会很好地扩展。