Avoid Circular Imports

DEX475 - JavaScript

📄 第 146 页 🎬 视频课程

课程章节介绍

各位同学,今天我们讲一个在Lightning Web Components里千万要小心的问题——循环导入。 想象一下,两个人互相等着对方先伸出手才能握手,结果谁也动不了。代码里也一样:模块A从模块B导入东西,而模块B又从模块A导入东西,这就形成了一个“依赖圈”。这种圈可以是直接的,比如Alpha导Beta、Beta导Alpha,也可以是绕了一大圈又回到自己。 在LWC里,这样的循环是明确不支持的。因为模块加载的时候,必须先把依赖都准备好,才能执行自己。可一旦出现循环,就会导致某个模块还没来得及完成初始化,就先被引用了,导入的值就变成了undefined。接着你的代码就会莫名其妙地崩溃。 症状往往很隐蔽,不一定是大摇大摆报错。你可能看到“TypeError: xxx is not a function”,或者“Cannot read properties of undefined”,明明单独测每个组件都好好的,把它们一结合就炸了。更坑的是,某天平台升级,模块的评估顺序稍微一变,之前能跑的代码突然就报错,让你摸不着头脑。 Slide上给了一个很典型的直接循环例子:一个叫Alpha的模块从Beta里导入东西,Beta又从Alpha里导入东西。运行时直接失败,没有任何侥幸。 所以,怎么避免?很简单:永远不要让两个模块互相导入。如果它们需要共享逻辑,就把那部分抽出来放到第三个公共模块里,比如叫Utils,让Alpha和Beta都去导入它,而不是彼此纠缠。平时画一下依赖图,或者用一些lint规则来检查,养成好习惯,就能远离这种头痛的问题。 记住,LWC里循环导入是硬伤,一定要绕开。好,这一节先到这里,大家动手写代码时留个心。

关键词

LWC Lightning Web Components Salesforce