Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用闭包封装React组件的状态_Reactjs - Fatal编程技术网

Reactjs 使用闭包封装React组件的状态

Reactjs 使用闭包封装React组件的状态,reactjs,Reactjs,当在组件层次结构中彼此相距很远的两个元素之间传递数据时,通过道具传递数据可能会非常繁琐。在这些用例中,我求助于使用Redux,只是因为当有大量组件时,它不太容易跟踪 我在一个小项目中所做的是使用闭包来封装状态并导出该变量并在其他地方使用它。我觉得这是一个反模式,但它确实有效 它的工作方式是声明将在组件中修改的某个变量。这个变量是从其他地方导入并从其他地方使用的变量 下面是我正在做的一个小示例(假设有一个大型组件层次结构): 所以我的问题是:有没有更好的方法来达到同样的效果?我们应该为这些用例使用

当在组件层次结构中彼此相距很远的两个元素之间传递数据时,通过道具传递数据可能会非常繁琐。在这些用例中,我求助于使用Redux,只是因为当有大量组件时,它不太容易跟踪

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

它的工作方式是声明将在组件中修改的某个变量。这个变量是从其他地方导入并从其他地方使用的变量

下面是我正在做的一个小示例(假设有一个大型组件层次结构):


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

正如您自己所说的,redux通过为您的应用程序提供一个全局的“应用程序状态”来解决这个问题,它允许您将任何您想要的组件连接到该状态

你的“闭包”只是一个穷人的Redux,它也是一个全局状态,只是它缺少Redux提供的任何特性(除非你特别编写)

让我们看看CompA需要根据CompB上的单击事件重新渲染,如何使用闭包自动执行此操作?您必须添加侦听器,检查相关状态是否已更改,然后重新渲染

所有这些事情都是由Redux免费完成的,所以我看不到任何额外的好处(除了不使用Redux,这本身就是一个好处)


如果不使用redux非常重要,那么这可能“很好”,但非常危险,而且我认为它不能很好地扩展。

您可能应该在SO帖子中用一个具体的例子来分享代码模式。如果您使用redux,则无需设置所选的颜色<代码>颜色选择器将发送一个操作,该操作将更新状态,并且所选颜色将自动更新,而用户无需单击按钮。