允许使用所需的周期,但可能会导致未初始化值。考虑重构以消除对循环的需要 [英] Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle

查看:37
本文介绍了允许使用所需的周期,但可能会导致未初始化值。考虑重构以消除对循环的需要的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Chrome控制台中为我的原生项目收到此警告消息。你知道我为什么会收到这个吗?

这是完整的消息:

需要周期:node_modules/react-native-radio-buttons/lib/index.js-> node_modules/react-native-radio-buttons/lib/segmented-controls.js-> node_modules/react-native-radio-buttons/lib/index.js

允许使用所需的周期,但可能会导致未初始化值。 考虑进行重构以消除循环的需要。

感谢您的建议。 谢谢

推荐答案

TL;DR:您将模块A导入模块B模块B导入模块A导致一个循环A🡒B🡒A🡒B🡒A.,这可能会导致错误。通过重组模块来解决这个问题,这样循环就会中断。


详细答案

在javascript中,如果您将不同的模块导入到其他模块中,则所有这些导入操作都会生成依赖关系树:

                                 root_module
                          ┌───────────┴───────────┐
                    sub_module_A             sub_module_B
                                         ┌────────┴────────┐
                                   sub_module_C       sub_module_D

当您运行代码时,所有模块都将从下到上或从叶子到主干进行评估,因此,例如,如果您将模块CD导入到模块B中,则CD的所有导出都已进行评估,不再是未定义的。如果将在CD之前评估模块B,则模块B将无法工作,因为来自CD的所有导出都将是未定义的,因为它们尚未进行评估。

不过,可以在依赖关系树中形成循环(这就是您收到警告的原因):

                                 root_module
                          ┌───────────┴───────────┐
                    sub_module_A             sub_module_B
                                                 🡑 🡓
                                             sub_module_C

问题:假设评估现在从模块C开始。由于它从模块B导入了一些内容,并且尚未进行评估,因此模块C无法正常工作。所有从B导入的内容都是未定义的。这实际上并没有那么糟糕,因为在最后,模块C在评估完所有其他内容后再次进行评估,因此C也在工作。如果评估以模块B开始,也是如此。

但是:如果您的代码从一开始就依赖于工作模块C,这将导致很难找到错误。因此您会收到此错误。

如何解决:在您的情况下,警告还会给出详细说明,说明出现循环的位置。您在node_modules/react-native-radio-buttons/lib/index.js中导入native-radio-buttons/lib/segmented-controls.js,在native-radio-buttons/lib/segmented-controls.js中导入node_modules/react-native-radio-buttons/lib/index.js。似乎循环被放在您的一些节点模块中。很遗憾,在这种情况下,您不可能自己解决这个问题。

如果循环位于您自己的代码中,则必须将某些导出提取到第三个模块/文件中,从该模块/文件将代码导入到先前形成该循环的两个模块中。

这篇关于允许使用所需的周期,但可能会导致未初始化值。考虑重构以消除对循环的需要的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆