Vue ref,reactive 响应式引用

// ref , reactive 响应式引用
// 原理,通过proxy 对数据进行封装,当数据变化时,触发模版等内容的更新
// ref 处理基础类型的数据
// reactive 处理非基础类型数据 如:数组,对象等

javascript 复制代码
<script>
// ref , reactive 响应式引用
// 原理,通过proxy 对数据进行封装,当数据变化时,触发模版等内容的更新
// ref 处理基础类型的数据
// reactive 处理非基础类型数据 如:数组,对象等

方法一:简单使用 ref,监听属性变化

方法二:简单使用 reactive 监听对象变化

// setup 
    // 创建 vue实例
   const app = Vue.createApp({
    
     // ref 时,使用name如: {{name}}
    // reactive 时,使用name如: {{nameObj.name}}
    template:  `
    <div >
        {{nameObj.name}}
    </div>
   `,

        // created 实例被完全初始化之前
        // 可以直接使用
        setup(props, context) {
            // 不能在里面用 this关键词
            // 不能调用外部函数
            // 方法一: 使用 ref
            /*
            const {ref} = Vue;
            // proxy, 'dell' 变成 proxy({value: 'lee'})这样的一个响应式引用
                let name = ref('dell');
                setTimeout(() => {
                    name.value = 'lee'
                }, 2000)
                return {
                    name
                }
                */
            // 方法二:  使用 reactive
            // proxy, {name: 'dell'} 变成 proxy({name: 'lee'})这样的一个响应式引用
            const {reactive} = Vue;
            const nameObj = reactive({name: 'dell'});
            setTimeout(() => {
                    nameObj.name = 'lee'
                }, 2000)
                return {
                    nameObj
                }
        }

    });

    const vm = app.mount('#root');
    
</script>

如果想

javascript 复制代码
<script>
// ref , reactive 响应式引用
// 原理,通过proxy 对数据进行封装,当数据变化时,触发模版等内容的更新
// ref 处理基础类型的数据
// reactive 处理非基础类型数据 如:数组,对象等

// setup 
    // 创建 vue实例
   const app = Vue.createApp({
    // ref 时,使用name如: {{name}}
    // reactive 时,使用name如: {{nameObj.name}}
    template:  `
    <div >
        {{nameObj.name}}
    </div>
   `,

   // created 实例被完全初始化之前
   // 可以直接使用
        setup(props, context) {
            // 不能在里面用 this关键词
            // 不能调用外部函数
            // 方法一:
            /*
            const {ref} = Vue;
            // proxy, 'dell' 变成 proxy({value: 'lee'})这样的一个响应式引用
                let name = ref('dell');
                setTimeout(() => {
                    name.value = 'lee'
                }, 2000)
                return {
                    name
                }
                */
            // 方法二:
            // proxy, {name: 'dell'} 变成 proxy({name: 'lee'})这样的一个响应式引用
            //    const {reactive} = Vue;
            //    const nameObj = reactive({name: 'dell'});
            //    setTimeout(() => {
            //         nameObj.name = 'lee'
            //     }, 2000)
            //     return {
            //         nameObj
            //     }

            // 方法三:
            // proxy, {name: 'dell'} 变成 proxy({name: 'lee'})这样的一个响应式引用
            // 对响应式 只读属性
            //    const {reactive, readonly} = Vue;
            //    const nameObj = reactive({name: 'dell'});
            //    // 只读属性
            //    const copyNameObj = readonly(nameObj);
            //    setTimeout(() => {
            //         nameObj.name = 'lee'
            //         copyNameObj.name = 'lei'
            //     }, 2000)
            //     return {
            //         nameObj,
            //         copyNameObj
            //     }

                // 方法四:
                // 注意 toRefs
                const {reactive, readonly, toRefs} = Vue;
            const nameObj = reactive({name: 'dell', age: 28});
            

            // toRefs proxy({name:'dell', age: 28}), { name: proxy({value: 'dell'}) , age: proxy({value: 28})}
            setTimeout(() => {
                    nameObj.name = 'lee'
                }, 2000)
                return {
                    nameObj,
                }
        }
    });

    const vm = app.mount('#root');
    
</script>
相关推荐
200不是二百2 分钟前
Vuex详解
前端·javascript·vue.js
滔滔不绝tao6 分钟前
自动化测试常用函数
前端·css·html5
LvManBa8 分钟前
Vue学习记录之三(ref全家桶)
javascript·vue.js·学习
码爸34 分钟前
flink doris批量sink
java·前端·flink
深情废杨杨35 分钟前
前端vue-父传子
前端·javascript·vue.js
工业互联网专业1 小时前
毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序
vue.js·spring boot·小程序·uni-app·毕业设计·源码·课程设计
J不A秃V头A2 小时前
Vue3:编写一个插件(进阶)
前端·vue.js
司篂篂2 小时前
axios二次封装
前端·javascript·vue.js
姚*鸿的博客2 小时前
pinia在vue3中的使用
前端·javascript·vue.js
宇文仲竹3 小时前
edge 插件 iframe 读取
前端·edge