vue3中ref、reactive、toRef、toRefs的使用

vue3中ref、reactive、toRef、toRefs的使用

四个函数都是用于在setup中创造响应式变量的

ref

ref可用于任何类型的数据创建响应式,取值需要加.value。对于基本数据类型,ref的性能优于reactive,而对于对象类型,ref仍然是通过reactive包装实现的。推荐优先使用ref,方便逻辑拆分和业务解耦

<div id="app">
  <p>{{ webName }}</p>
</div>

<script>
const app = Vue.createApp({
  setup(props, context) {
    const { ref } = Vue;
    // 需要响应的改变的数据必须使用ref函数
    let webName = ref("xiguapengpeng");
    // 3s后修改数据,页面数据跟着变化
    setTimeout(() => {
      // ref接收参数并有一个value属性
      webName.value = "https://xiguapengpeng.github.io/";
    }, 3000);

    // 暴露变量供视图使用
    return { webName };
  },
});

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

reactive

reactive只用于创建引用类型数据的响应式,取值不需要加.value

<div id="app">
  <p>{{ objData.webName }}</p>
  <p>{{ objData.webUrl }}</p>
</div>

<script>
const app = Vue.createApp({
  setup(props, context) {
    // 数组或对象使用 reactive 函数
    const { reactive } = Vue;
  
    // 对象数据
    let objData = reactive({
      webName: 'xiguapengpeng',
      webUrl: 'https://xiguapengpeng.github.io/',
    });

    setTimeout(() => {
      objData.webName = '温新';
    }, 3000);

    // 暴露变量供视图使用
    return { objData };
  }
});

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

toRef

将对象中的属性单独变成响应式数据

<div id="app">
  <p>{{ objData1.webName }}</p>
  <p>{{ objData1.webUrl }}</p>
  <p>{{ objData2.webName }}</p>
  <p>{{ objData2.webUrl }}</p>
</div>

<script>
const app = Vue.createApp({
  setup(props, context) {
    const { reactive, toRefs, toRef } = Vue;
    
    // 对象数据
    let objData1 = reactive({ webName: 'xiguapengpeng' });
    let objData2 = { webName: 'fafa' };

    // 若objData中没有webUrl,则赋值为空
    let webUrl1 = toRef(objData1, 'webUrl');
    let webUrl2 = toRef(objData2, 'webUrl');
    setTimeout(() => {
      webUrl1.value = 'https://xiguapengpeng.github.io/';
      webUrl2.value = 'https://xiguapengpeng.gitee.io/';
    }, 3000);

    return { objData1, objData2 };
  }
});

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

toRefs

使解构后的数据重新获得响应式

<div id="app">
  <p>{{ webName }}</p>
  <p>{{ webUrl }}</p>
</div>

<script>
const app = Vue.createApp({
  setup(props, context) {
    // 数组或对象使用 reactive 函数
    const { reactive, toRefs } = Vue;
  
    // 对象数据
    let objData = reactive({
      webName: 'xiguapengpeng',
      webUrl: 'https://xiguapengpeng.github.io/'
    });

    // 数据对象结构
    let { webName, webUrl } = toRefs(objData);

    return { webName, webUrl };
  }
});

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

总结

类型是否触发页面改变是否可以解构
ref
reactive
toRef
toRefs
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值