其他分享
首页 > 其他分享> > vue3语法-响应式数据和组合setup

vue3语法-响应式数据和组合setup

作者:互联网

  链接:http://ggz.longpanda.top/article_detail?id=23   setup和mixins的区别 Mixin的缺陷:     1、很容易发生冲突:因为每个 mixin 的 property 都被合并到同一个组件中,所以为了避免 property 名冲突,你仍然需要了解其他每个特性。     2、可重用性是有限的:我们不能向 mixin 传递任何参数来改变它的逻辑,这降低了它们在抽象逻辑方面的灵活性。       因此,为了解决这些问题,我们添加了一种通过逻辑关注点组织代码的新方法:组合式 API。   数组和对象的赋值 注意:对象和数组直接赋值不能触发响应式,push或者根据索引遍历赋值可以保留reactive数组的响应性,或者将数组存在一个对象内,如下:   推荐:     const state = reactive({         arr: []     })       state.arr = [];   不能     const arr = reactive([])     arr = []     ref ref : 为数据添加响应式状态,不会影响原始数据 ,一次只能定义一个ref响应式数据.   应用:需要触发页面更新,可用于任何类型的数据创建响应式(传入引用类型,实际内部又调用reactive方法为其创建响应式),但官方建议用于基本数据类型。通过.value 的方式去访问其数据   原理:ref 则是用把数据给包装成 ref 对象, .value 的方式去访问其数据,在 setup 中吗,在模板中不需要, 因为会自动添加.value。vue 强烈建议 ref 用来处理 非指针类型的数据类型, string number 等, 通过给 value 属性添加 getter/setter 来实现对数据的劫持   reactive reactIve:用来处理对象,数组,等指针类型的数据   应用:需要触发页面更新,只用于创建引用类型数据的响应式。解构会失去响应式,所以解构需配合toRefs使用    原理:reactive 是利用 proxy 来实现   export default {    name:'Page2',    setup(){        const state = reactive({            name:"张三",            age:20        })        return{            ...toRefs(state)//解构赋值后数据就会失去响应式,需要用toRefs让对象拥有ref响应式属性,UI才会视图更新        }    } }     toRef、toRefs toRef: 使用toRef将某个对象中的属性变成响应式数据,修改响应式数据是会影响到原始数据的。但是需要注意,如果修改通过toRef创建的响应式数据,并不会触发UI界面的更新。 所以,toRef的本质是引用,与原始数据有关联 import {toRef} from 'vue'; export default {   name:'App'   setup(){     let obj = {name : 'alice', age : 12};     let newObj= toRef(obj, 'name');     function change(){       newObj.value = 'Tom';       console.log(obj,newObj)     }     return {newObj,change}   } } 上述代码,当change执行的时候,响应式数据发生改变,原始数据obj也会改变,但是唯独UI界面不会更新 上面两个介绍了,ref 和 reactive 可以改变页面。接下来这两个则不能去改变页面,但是数据还是会遵循响应式。   小结: ref和toRef的区别、特点: (1). ref本质是拷贝,修改响应式数据不会影响原始数据;toRef的本质是引用关系,修改响应式数据会影响原始数据 (2). ref数据发生改变,界面会自动更新;toRef当数据发生改变是,界面不会自动更新 (3). toRef传参与ref不同;toRef接收两个参数,第一个参数是哪个对象,第二个参数是对象的哪个属性 (4). toRef 用于创建对象指定的属性响应式,换句话说就是只能控制一个对象中的一个属性。 (5). toRefs 用于创建对象响应式。 (6). 他们对响应式的处理你可以理解为: toRef 类似 ref, toRefs 类似 reactive  
类型是否触发页面改变是否可以结构
ref
reactive
toRef
toRefs

 

setup组合用法

rem.js文件: import {reactive} from 'vue'; function useRemoveStudent() {     let state = reactive({    });     function remStu(index) {}     return {state, remStu}; } export default useRemoveStudent;     add.js: import {reactive} from 'vue'; function useAddStudent(state) {     let state2 = reactive({ });     function addStu(e) { }     return {state2, addStu} } export default useAddStudent;     主文件app.vue   <template>   <div></div> </template> <script>   import useRemoveStudent from './rem';   import useAddStudent from './add';      export default {       name: 'App',       setup() {             let {state, remStu} = useRemoveStudent();            let {state2, addStu} = useAddStudent(state);             return {state, remStu, state2, addStu}   } } </script>

 

 

标签:响应,数据,setup,toRef,语法,reactive,state,vue3,ref
来源: https://www.cnblogs.com/web-zqk/p/16107599.html