Actions, Public API & Counter Example

DEX475 - Manage State Across LWC Components

📄 第 303 页 🎬 视频课程

课程章节介绍

同学们,咱们今天来看状态管理中一个非常核心的点,叫做“动作是状态突变的守门人”。 什么意思呢?你可以把状态想象成一个保险箱,里面放着所有重要的数据,我们管这些数据叫“原子值”。而想要修改这些值,只有一条路——必须通过,动作,来调用 setAtom。这就好比你不能直接伸手进保险箱里拿东西,必须找那个专门掌管钥匙的守卫,也就是动作。 所以动作到底是什么?说白了,它就是个函数。它可以接收参数,执行同步或异步的逻辑,最后返回一个值。但关键在于,你希望外面能用到的东西,都必须在返回声明里明确暴露出去。公共API只包含你返回的值和这些操作。没有返回的,外面根本看不见,也碰不着。 这里有个非常容易踩的坑,大家一定要注意:你的动作不论初始化参数是什么,,永远返回一致的形状,。也就是说,返回对象的属性结构不能变。消费者依赖你的API,如果一会有这个属性,一会儿又没有,组件就会直接崩掉,维护起来也特别痛苦。 在模板里,我们又是怎么使用这些状态的呢?状态值通过像 `{counter.Value.call}` 这样的语法去访问,而动作呢,是绑定到组件的方法上,这样用户点击按钮之类的事件就能触发。 还有一条铁律:状态管理器必须纯粹。它只能管数据,绝对不要在里面去碰 DOM API、元素引用或者事件对象。比如你千万别在里面写 `document.querySelector`,也别去处理事件冒泡。把UI和状态彻底分开,状态管理器的任务只是计算和返回数据。 那放哪儿最好呢?最佳实践是创建一个专门的 API 模块组件,这个组件,没有 HTML 文件,,只有 JavaScript 和元数据。这样它就是个纯逻辑容器,别的组件可以随时 import 使用,跨组件共享状态特别方便。 总结一下:动作是唯一能改状态的地方,通过 setAtom 变更原子值;它是个能返回值的函数;暴露出去的 API 形状必须一致;模板里用特定语法访问和绑定;状态管理器必须纯粹,不碰任何 DOM 相关的东西;把它放在无模板的 API 模块里,方便复用。 咱们在开发时把这些点记牢,代码就会又干净又健壮。好,这一节先到这里。

关键词

LWC Lightning Web Components Salesforce