一、computed和methods的区别
- 如果一个值改变后需要处理的步骤比较多,使用watch
- 如果一个值需要多个值算出来,使用computed
- computed首次加载就会执行,watch不会执行,如果需要第一次就需要将immediate改为true
- computed是深度监听,watch如果需要深度监听,需要加上deep
- 看到一些文章说computed中不支持异步代码,实测一下,异步代码还是会执行的,但是如果给computed加上async 那么这个计算属性的值就是promise对象,因为async函数的返回值就是promise。在watch中则不会受到影响,因此不建议在computed中执行异步代码。
computed: {total() {new Promise((resolve,reject)=>{setTimeout(() => {console.log(999) // 这行代码会执行,异步代码会在计算属性中执行,只要变化都会执行resolve(33)}, 1000);})return JSON.stringify(this.obj) // 会深度监听对象的变化},async num(){await new Promise((resolve,reject)=>{setTimeout(() => {resolve(33)}, 10000);})console.log(999) // 等待10秒后,这行代码会执行return this.obj.age // async修饰的函数返回值是一个promise对象。}},watch: {obj: {handler() {this.sum = this.obj.name + this.obj.age},immediate:true, // 立即执行deep:true // 深度监听}}
