Observe an Object's Properties — Without vs With @track

DEX475 - Fields, Properties, and Attributes

📄 第 105 页 🎬 视频课程

课程章节介绍

同学,今天咱们来聊聊LWC里一个挺重要的装饰器——@track。你可能已经知道,在组件里我们定义属性来绑定数据,比如这里有个`fullName`对象,里面包含了`firstName`和`lastName`。 那么问题来了:如果我直接修改`this.fullName.firstName = 'John'`,页面会自动更新吗?答案是不会,除非你用了`@track`。为什么?因为框架默认只观察属性本身的引用有没有变。你给它赋个新对象,引用变了,它会知道。但你只是修改了它里面的某个值,引用没变,框架就无感,所以不会重新渲染。 这时候`@track`就派上用场了。你只要在属性前面加上`@track`,比如`@track fullName = {...}`,那框架就会深入进去,观察这个对象内部属性的变化。一旦你改了`this.fullName.firstName`,它立刻就能检测到,组件也会随之刷新。 同样的规则也适用于数组。比如你有一个数组,你用`push`往里加东西,引用没变,不加`@track`就不会更新;加了`@track`,框架就能捕捉到这些内部变化。 所以记住这个简单的规则:如果你的属性是对象或数组,并且你需要追踪它内部的改动来驱动视图更新,那就一定要用`@track`注解它。这样你的组件才能如你所愿地响应数据变化。 好了,这一part先到这里,有什么问题随时提。

关键词

LWC Lightning Web Components Salesforce