computed的setter和getter,详解computed属性中setter和getter的使用方法和注意事项
Computed 属性中的 Setter 和 Getter
在 JavaScript 的 Vue.js 框架中,computed 属性是一种非常有用的工具,用于处理基于其他数据属性的动态计算值。这些计算属性通常包含 getter 和 setter,它们允许我们定义计算属性的读取和写入行为。
1. Getter
定义:
Getter 是一个函数,当读取计算属性时会被调用。它通常用于返回基于其他数据属性的计算结果。
使用方法:
在 Vue 组件的 `computed` 属性中,你可以定义 getter 函数。这个函数会接收 `this` 上下文,并可以访问组件的实例数据。
javascript
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
computed: {
fullName: {
// getter
get() {
return this.firstName + ' ' + this.lastName;
}
}
}
}
在这个例子中,`fullName` 是一个计算属性,它的 getter 函数返回 `firstName` 和 `lastName` 的拼接结果。
注意事项:
Getter 函数不应该有副作用。它们应该是一个纯函数,只基于其输入(即组件的数据属性)进行计算并返回结果。
Getter 可以在函数内部使用 `this` 访问组件的实例数据。
2. Setter
定义:
Setter 是一个函数,当给计算属性赋值时会被调用。它通常用于处理基于其他数据属性的值更新。
使用方法:
在 Vue 组件的 `computed` 属性中,你可以定义 setter 函数。这个函数会接收两个参数:新值和旧值。
javascript
export default {
data() {
return {
firstName: 'John',
lastName: 'Doe'
};
},
computed: {
fullName: {
// getter
get() {
return this.firstName + ' ' + this.lastName;
},
// setter
set(newValue) {
const names = newValue.split(' ');
this.firstName = names[0];
this.lastName = names[names.length - 1];
}
}
}
}
在这个例子中,`fullName` 是一个计算属性,它的 setter 函数接受一个 `newValue` 参数,并将其拆分为 `firstName` 和 `lastName`。
注意事项:
Setter 函数应该谨慎处理副作用。虽然它们可以更新组件的数据属性,但应该避免引发不必要的副作用,如网络请求或复杂的逻辑。
Setter 函数可以接收两个参数:新值和旧值。但在大多数情况下,我们只需要新值,因为旧值可以通过 `this` 上下文中的计算属性访问。
Setter 函数应该处理无效或不可用的值。例如,如果 `newValue` 不是有效的名字格式,你可能需要将其视为无效,并避免更新数据属性。
3. 使用场景
动态计算属性:
当你需要根据其他数据属性的变化动态更新计算属性时,可以使用 setter。例如,上面的 `fullName` 例子就是一个动态计算属性,它根据 `firstName` 和 `lastName` 的变化更新自己。
验证输入:
当你需要验证用户输入时,可以使用 setter。例如,你可以使用 setter 来验证 `fullName` 是否是一个有效的名字格式,并在必要时拒绝更新 `firstName` 和 `lastName`。
在 Vue.js 中,computed 属性是一种强大的工具,允许你定义基于其他数据属性的动态计算值。使用 getter 和 setter,你可以定义计算属性的读取和写入行为,从而实现复杂的逻辑和验证。你应该谨慎使用 setter,避免不必要的副作用,并确保你的 getter 函数是一个纯函数。

