salesforce LWC 数据流@api注意事项
为了防止代码复杂性和意外的副作用,数据应该从一个方向流向一个方向,从父级到子级。
当一个组件装饰一个字段@api以将其公开为公共属性时,它应该仅在初始化该字段时设置该值。初始化字段后,只有所有者组件才能设置该值。组件应将传递给它的值视为只读。要触发所有者组件提供的属性值的突变,子组件可以向父组件发送事件。如果父级拥有数据,则父级可以更改属性值,该属性值通过单向数据绑定向下传播到子组件。
传递给组件的对象是只读的
传递给组件的非原始值(如对象或数组)是只读的。组件不能更改对象或数组的内容。如果组件尝试更改内容,您会在浏览器控制台中看到错误。要对数据进行变异,请对要变异的对象进行浅拷贝。
要触发所有者组件提供的属性值的突变,组件应向所有者发送事件。
要了解只读对象,请阅读文档并使用lwc.dev上的代码,这是 Lightning Web 组件:开源开发人员站点。
对公共属性使用原始值
我们建议对属性使用原始数据类型,而不是使用对象数据类型。在更高级别的组件中分割复杂的数据结构并将原始值传递给组件的后代。
使用原始值更好的原因有几个。
原始值需要@api明确定义数据形状的特定属性。接受对象或数组需要文档来指定形状。如果物体形状发生变化,消费者就会崩溃。
标准 HTML 元素只接受属性的原始值。当标准 HTML 元素需要复杂的形状时,它会使用子组件。例如,一个table元素使用tr和td 元素。只有原始类型可以在 HTML 中定义。例如,不是 HTML 中的值,仅在 Lightning Web 组件中。