课程章节介绍
同学们,我们来看这一页幻灯片,它是讲在 Lightning Web Components 里怎么用查询参数来传递状态,核心就是 PageReference 的状态属性。
首先记住一个关键规矩:PageReference 对象是冻结的,也就是说你不能直接修改它。如果你要改,必须先复制一份。然后,所有的状态键都要加上命名空间前缀,默认是 "c__" ——就是字母c加两个下划线。而且,状态里的所有值都必须是字符串,不能是数字或者对象。还有特别重要的一点:千万别把密码、令牌这些敏感信息塞进 URL 的查询参数里,因为 URL 是明文的,不安全。
那我们怎么在组件里拿到这些状态呢?用 ClientPageReference 这个有线适配器。它能给你的组件提供反应式的访问,也就是说,当页面状态变化时,你的组件会自动收到新的值,不需要自己写复杂的监听逻辑。
那么什么组件能通过 URL 传递状态?就是 URL 可编址的组件。要让一个组件变成 URL 可编址,你需要实现 lightning__UrlAddressable 这个目标,并且在组件的元数据里声明标准__组件页面引用类型。注意这里的 componentName 要用 命名空间__组件名 的格式,比如如果你有个 helloWorld 组件,就写 c__helloWorld。
当有人导航到这个组件时,状态属性会被转换成查询参数,跟在 URL 后面,比如 ?c__recordId=123。在你的组件代码里,你就通过 ClientPageReference.State 来读取这个 recordId,简单又直接。
如果在控制台应用程序里使用,情况稍微特殊一点。你需要检查 IsConsoleNavigator,如果是,就用 openTab() 方法在工作区选项卡里打开组件,而不是跳到新页面。为了避免点同一个链接生成一堆重复的标签页,我们通常会在状态对象里加一个 uid 字段,比如生成一个随机字符串,这样每次导航都带上不同的 uid,系统就会认为是不同的选项卡,不会覆盖原来的。
最后要注意一个限制:Experience Builder 网站目前不支持 URL 可编址的组件,所以如果你在构建社区云站点,就不能用这种方式来传递参数。
好了,这一页的重点就是这些:状态要冻结、键名前缀、值转字符串、敏感数据不上URL,用 ClientPageReference 实时读取,URL 可编址组件的配置,控制台里用 openTab 加 uid 防重复,还有社区云不支持的坑。大家先消化一下,有问题随时提出来。
关键词
LWC
Lightning Web Components
Salesforce