课程章节介绍
同学们,今天咱们来看一个在 Lightning Web Components 里非常实用的模式——,用 setter 处理依赖关系,同时做数据规范化,。这个模式能让你的组件更健壮、更不容易出错。
咱们假设你要开发一个表格,有个“选中某一行”的功能。你暴露了一个 `selectedHandler` 属性给外部设置,但选中这一行之前,你得先拿到表格的行数据,对吧?如果外部设置 `selectedHandler` 的时候,行数据还没加载完,怎么办?直接操作就会报错。
这时候,我们就在 `selectedHandler` 的 setter 里做一个依赖检查。
它的逻辑很简单:
- 先把外部传进来的值存下来。
- 然后它问:“嘿,行数据在不在?”
- 如果行数据还没到位,它就默默记一笔——把 `selectedRowsSet` 设为 `true`,然后提前返回,啥也不做。等于留个纸条:“等数据来了你可别忘了要选中这些行啊。”
- 等到行数据真正加载完成的时候,我们就会回来检查这个标志,发现有未处理的任务,再去调用 `markSelectedDeliverator` 继续完成选中。
这就像你打电话给同事安排任务,同事在开会暂时不能说话,你给他发了个消息,等他开完会自然会处理。
如果行数据一开始就在,那 setter 就直接走正常流程,立刻调用 `markSelectedDeliverator()` 完成选中,干净利落。
这种先存值、检查依赖、有能力就立刻处理、没能力就留待日后补做的思路,就是,依赖关系管理,。它保证了你的代码不会因为数据还没准备好就崩溃,也绝不会丢掉外部发来的指令。
接下来,咱们再看这些代码里还藏了另一个宝贝——,数据规范化,。
你注意到没有,例子中用了 `normalizeBourle()` 来规范布尔值。为啥要这么做呢?因为外部使用者可能传各种奇奇怪怪的东西过来,比如字符串 `"true"`、空字符串,甚至数字 `1`。为了内部逻辑统一,我们在 setter 里把收到的值转成标准的布尔值,然后存到一个私有字段里供内部使用。但吸引人的一点是,getter 返回的还是原始值,原样返回给外部。这样既保证了内部处理的高一致性,又不改变外部看到的模样,两全其美。
规范化也可以在 getter 里做,这样就算使用者从来没设置过这个属性,组件模板也能拿到一个有效的默认值,不怕空或 `undefined` 报错。这是构建,防御性组件 API, 的绝佳实践,让你的组件特别能扛打,怎么用都不容易出毛病。
所以总结一下,今天我们掌握了两点:
1. 在 setter 里利用依赖检查,妥善处理“先来后到”的问题,让异步加载场景下指令不丢失。
2. 对数据进行规范化,让你的属性内部永远干净可靠,对外又可保持原值。
把这些模式用起来,你开发的 Lightning Web Components 会变得更健壮、更专业。大家可以试着在自己的项目里实现一下,一定会让你的代码质量提升一大截。
好了,这个 Slide 的内容就到这里,同学们有什么问题随时提。
关键词
LWC
Lightning Web Components
Salesforce