选项式诸内容
模板语法就是 h 渲染函数的一个语法糖
data
- 本身是一个函数
- 函数需要返回一个对象
- 选项中的内容自动加入响应式系统
- 选项式中 $data 可以从实例中返回所有数据
computed
- 可以直接当 data 返回
- 依赖属性更新则更新,无更新则使用缓存值
- 没参数
- 没法在其他配置项中使用(不够公共复用)
- 相比 watch 一般不修改(但可以修改) data 属性,而是产生新值(getter, setter)
js
<div>全名:{{ fullName }}</div>
<button @click="changeName">改改computed</button>
let fullName = computed({
get() {
return firstName.value + "-" + lastName.value;
},
set(newVal) {
console.log(newVal);
[firstName.value, lastName.value] = newVal.split("-");
},
});
const changeName = () => {
fullName.value = "bell-wood";
};
methods
- 从计数器案例看,似乎一个方法更新会让页面上所有方法重新执行
- 想要在缓存上有优势就要提前传参数
- 无法调用 watch
- 可以在模板中使用
- 可以设置返回值
- 因为 data 用函数返回,你就不能用箭头函数,不然拿不到 vue 实例,直接拿 window
- vue 把函数都 bind 了 publicthis,从源码的 componentsOption 看,publicthis 就是 instance.proxy
watch
- 主要瞄准耗时/无法明确发生时间的异步操作
- 比如某某数组(像文档的 blog)新增内容之后,设置定时器按时将新值存进数组
- watch 本身也是懒执行的,数据发生变化才操作,某种程度也算缓存吧
- 直接修改 data,不讲返回值
- 更命令式一些,不太涉及过于具体的内部细节
- 可以调用 method 函数
- 不能在模板中直接使用