提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
选项(options),例如,data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性改变(也包括生命周期钩子)、不断迭代,也就意味着功能越来越多,当组件变得更大、更复杂时、逻辑关注点的列表就会增长、同一个功能的逻辑就会被拆分的很分散; 后期迭代开发会更挠头😒😒😒逻辑关注点相关的代码 放在一起 那么开发不就更清晰了吗setup函数用它来替代之前所编写的大部分其他选项methods、computed、watch、data、生命周期等等注意:必须返回 模板中才能渲染
setup(){
let message = "message";
let counter = 100;
const increment = ()=>{
counter++;
}
const decrement = ()=>{
counter--;
}
return{message,counter,increment,decrement} ;
}
再次被使用时就会进行依赖收集发生改变时,所有收集到的依赖都是进行对应的响应式操作(比如更新界面)内部交给了某一个函数将其变成响应式对象的。可变的响应式对象,该对象作为一个响应式的引用 维护着它内部的值,这也是名称的由来。ref的 value 属性中被维护的;const message = ref("信息")
模板中引入ref的值时,Vue会自动帮助我们进行解包操作,所以我们并不需要在模板中通过 ref.value 的方式来使用;setup 函数内部,它依然是一个 ref引用, 所以对其进行操作时,我们依然需要使用 ref.value的方式;模板中的解包是浅层的解包ref放到一个reactive的属性当中,那么在模板中使用时,它会自动解包reactive或者ref可以获取到一个响应式的对象,但是某些情况下,我们传入给其他地方(组件)的这个响应式对象希望在另外一个地方(组件)被使用,但是不能被修改,这个时候如何防止这种情况的出现readonly的方法返回原始对象的只读代理(也就是它依然是一个Proxy,这是一个proxy的set方法被劫持,并且不能对其进行修普通对象不允许修改的原来的对象是允许被修改的readonly返回的对象的setter方法被劫持了是否是由 reactive 或 readonly创建的 proxy解构语法,对reactive返回的对象进行解构获取值,那么之后无论是修改解构后的变量,还是修改reactive不再是响应式的const state = reactive({
message:'信息',
age:20
});
const { message,age } = state
toRefs的函数,可以将reactive返回的对象中的属性都转成refconst { message,age } = toRefs(state)
const name = toRef(state,'name');
const {age} = state;
const addName = ()=>{
state.name = 'dfh'
}