Vue的Getter是一種可以讓你獲取Vue實(shí)例數(shù)據(jù)的計(jì)算屬性。計(jì)算屬性定義在Vue實(shí)例的屬性里,并且具有自己的緩存。這意味著只要你依賴的源數(shù)據(jù)沒有被更改,多個(gè)Getter將永遠(yuǎn)返回相同的結(jié)果,這將大大優(yōu)化性能。
Getter的工作原理是通過一個(gè)函數(shù)在Vue實(shí)例中定義一個(gè)計(jì)算屬性。它可以處理所有通用的數(shù)據(jù)計(jì)算需求,如格式化日期,計(jì)算合計(jì)值等。Getter接受源數(shù)據(jù)作為參數(shù),并且只有當(dāng)源數(shù)據(jù)改變時(shí)才會(huì)重新計(jì)算。在computed屬性中使用Getter可以優(yōu)化代碼的可讀性和維護(hù)性。
computed: { fullName() { return this.firstName + ' ' + this.lastName } }
Getter不僅可以使用于Vue實(shí)例中,還可以使用于Vue組件的計(jì)算屬性中。這樣就可以共享相同的Getter函數(shù),避免每個(gè)組件都定義一遍相同的計(jì)算屬性。
const fullName = { computed: { fullName() { return this.firstName + ' ' + this.lastName } } } export default { mixins: [fullName], data() { return { firstName: 'John', lastName: 'Doe' } } }
Getter支持如下選項(xiàng):get, set, cache和lazy。其中Get選項(xiàng)用于設(shè)置計(jì)算性屬性的Getter函數(shù),set選項(xiàng)用于設(shè)置計(jì)算性屬性的Setter函數(shù),cache選項(xiàng)用于啟用或禁用緩存,lazy選項(xiàng)用于禁用緩存并將計(jì)算性屬性設(shè)置為lazy式計(jì)算。
const myGetter = { computed: { fullName: { get() { return this.firstName + ' ' + this.lastName }, set(value) { const names = value.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } } } }
Getter可以通過依賴跟蹤自動(dòng)獲取源數(shù)據(jù)的改變,并且只有在響應(yīng)式依賴發(fā)生更新時(shí)才會(huì)重新計(jì)算。這意味著Getter可以大量的減少DOM操作,提高性能。
在Vue中使用Getter時(shí)需要注意:
- Getter只會(huì)對(duì)它的運(yùn)算式周圍的響應(yīng)式依賴進(jìn)行跟蹤
- Getter的計(jì)算結(jié)果會(huì)被緩存,只有響應(yīng)式依賴改變時(shí)才會(huì)重新計(jì)算
- Getter不后對(duì)Vue實(shí)例的數(shù)據(jù)進(jìn)行任何修改,它只返回一個(gè)計(jì)算后的新值
- Getter只有在使用到它的時(shí)候才會(huì)執(zhí)行,否則它會(huì)一直監(jiān)視響應(yīng)式依賴的變化
- Getter可以依賴其他的Getter,從而使應(yīng)用程序更加靈活和可維護(hù)
- Getter可以在模板或JSX中直接使用,不需要調(diào)用它
總而言之,Getter是Vue中非常有用的一部分。通過Getter,我們可以輕松地獲取Vue實(shí)例中的負(fù)載數(shù)據(jù)。Getter在Vue中具有極高的性能和靈活性,使得代碼更易于維護(hù)和理解。