课程章节介绍
同学们,今天我们来看一个非常重要的概念:父组件向子组件传递对象或数组这类非原始值的时候,背后到底发生了什么。
想象一下,在父组件的 JavaScript 里,我们定义了一个简单的对象,比如给它一个 msg 属性,值是 "hello"。然后在父组件的 HTML 模板中,用花括号语法把它传给子组件,就像这样写:``。
为了让我们看得更清楚,父组件还会有一个叫 serializedObj 的 getter,它内部只是调用了 JSON.stringify 把这个对象转成字符串,再显示在界面上。这样,当对象发生变化时,我们能立刻看到效果。
好,关键点来了。当这个对象真的传给子组件的时候,子组件拿到的并不是原始对象本身,而是一个,只读代理,。这是 LWC 框架偷偷做的一层包装。
只读代理就像一个透明的保护壳,它会拦截所有试图修改数据的操作。假如子组件里有人写了 `this.data.msg = 'world'`,这个赋值不会生效,甚至连嵌套属性的修改都会被阻止。这样做,就是为了强制单向数据流——数据只能从父流向子,子不能反过来偷偷改父的数据。
换句话说,父组件始终是这份数据的唯一主人,拥有绝对的控制权。子组件只能读,不能直接写。如果需要修改,子组件必须通过发送事件,去通知父组件来改。
记住这个设计,它让我们的组件关系更清晰,应用的状态也更可预测、更好调试。大家好好体会一下这只可爱的“只读代理”。
关键词
LWC
Lightning Web Components
Salesforce