前言
在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作。
基础使用
在computed中,声明一个函数,并需要提供一个返回值,用于在页面展示或者结合其他方法进行处理
结合state状态使用
通过changeName返回一段依赖于name的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <li>computed基本使用</li> <li>name值:{{ name }}</li> <li>{{ changeName }}</li>
data() { return { name: "zhangsan", }; },
computed: { changeName: function () { return `一段依赖于name:${this.name}的文字`; }, },
|
使用其他组件状态
主动触发computed方法,对比不依赖于其他状态下的区别,通过点击事件,主动触发一些操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <li>{{ isCache }}</li> <li>{{ cacheTip }}</li> <li>{{ changeCache }}</li> <li><button @click="handleChange">修改文字</button></li>
data() { return { cacheTip: "cacheTip原始值", }; },
computed: { isCache: function () { return `不依赖于任何属性值的一段文字`; }, changeCache: function () { return `依赖于cacheTip,${this.cacheTip}`; }, },
methods: { handleChange() { this.cacheTip = "cacheTip状态被修改"; }, },
|
当我们点击修改状态时,可以看到,cacheTip被修改只会,依赖于cacheTip的changeCache也会发生改变
isCache因为不和其他状态关联,所以还是保持原来的值不变
getter VS setter
上面的cacheTip,或者isCache,在computed的通用方法中,默认都是使用了getter方法去获取处理过的值
可以写成
1 2 3 4 5
| isCache: { setter:function () { return `不依赖于任何属性值的一段文字`; } }
|
通过getter和setter,可以进一步对需要处理的状态进行处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <li>{{ firstName }}</li> <li>{{ lastName }}</li> <li>{{ setterGetter }}</li> <li><button @click="handleChangeFirst">修改文字</button></li>
data() { return { firstName: "lewyon001", lastName: "布欧001", }; },
computed: { setterGetter: { // getter get: function (newValue) { console.log("newValue", newValue); return this.firstName + " " + this.lastName; }, // setter set: function (newValue) { console.log("newValue", newValue); this.firstName = `${newValue.firstName}`; this.lastName = `${newValue.lastName}`; }, }, }
methods: { handleChangeFirst() { this.setterGetter = { firstName: "lewyon", lastName: "布欧" }; }, },
|
get属性可以获取最原始的依赖值并处理,
set方法,可以获取修改后的依赖值,在修改之后一并展示到页面上或者进行其他业务需要的处理
computed方法的基础,包括进阶的操作,以及setter和getter方法如上
使用建议
作为经常使用的方法,
- computed可以作为依赖于其他状态的缓存进行使用,包括一些不经常更新的内容,减少开销
- 简单的字符串模板结合其他状态
- 还有其他的场景在开发中,我们都可以进行使用,结合watch等。
关于vue和watch的区别,以及watch的使用详解,在个人的博客中持续更新中。以上例子的源码中已开源,后续关于vue的笔记也会继续更新
vue-note笔记