在更改全局变量时重新渲染React组件



我试图将一个旧的AngularJS 1应用程序迁移到React,但遇到了一大堆问题。。。但最棒的是让React重新渲染其组件。也许有人对我的具体问题有个好主意。

现状

我的应用程序由一个非常庞大的基于规则的计算算法组成。想象一下,当你切换一个开关时,它会开始计算和检查规则,然后显示价格,其他开关可能会被禁用。当禁用的开关在被禁用之前打开时,会检查更多的规则,等等…

所有数据和状态都100%存储在本地全局变量和数组中。

在AngularJS中,所有交换机都有一个巨大的范围。开关通过Angular连接到全局存储变量,并且相应的钩子如"0";ng点击";或";ng被检查";。

React迁移

现在在React中,我开始用React组件替换开关。但是因为我不想重写存储机制,所以我尝试将组件链接到相应的全局变量。问题是,这些组件在全局变量更改后不会重新渲染(他们知道多少?(。

我读了很多关于React和重新渲染的文章,我的结论是自动重新渲染只适用于道具或状态,这些道具或状态在组件内部被更改。另一种选择是使用Flux,或者通过将它们封装在getter/setters中来创建自己的基于侦听器的全局存储访问,但遗憾的是,这是不可能的,因为应用程序的大小以及逻辑和ui函数与仅由本地JS组成的逻辑函数严格分离,从而通过Java Nashorn处理它。

结论

现在我只看到2个选项

  • 在完成所有计算后,强制重新渲染所有Container(这与EVERYWHERE一样是不鼓励的(
  • 使用另一个更像AngularJS的框架,比如vue.js(至少乍一看(

也许这里的任何人都知道将全局变量挂接到React组件中的另一种方法。。。

您可以在Redux中创建一个特殊的基于Flux的数据层(例如(,并通过Redux-observable将其连接到您的困难数据层上(例如(。

React<–>Redux<–>数据层

这将有助于使用所有React功能,而不是在每次单击时重新渲染所有UI。

使用您的数据层就像RESTapi或web套接字连接一样。Redux状态可以等于数据层状态,或者更紧凑,或者更React可连接,这取决于您。

使用redux。Redux是一个用于管理应用程序状态的开源JavaScript库。

相关内容

最新更新