Vue3中ref和reactive的用法

1 js中的方法、变量、watch只有被return出去才能被页面使用
创建响应式数据,即js中值改变,页面会跟着变,简单数据用ref,复杂数据-数组和对象用reactive,然后将数据return出去,

    let name = "星星";
    return {
      name
    };

这样的数据页面也能使用并显示出来,但不是响应式的,改为响应式:
2 简单数据,js中取值要用val.value

let name = ref("星星");
const handleChange = ()=>{
	console.log(name.value)//带.value
}
    return {
      name,handleChange
	};
<el-input v-model="name" @change="handleChange"></el-input>

3 复杂数据,js中取值可以直接用

let data = reactive({uname: "星星",age: 18,});
const handleChange = ()=>{
	console.log(data.uname)//直接用
}
    return {
      data,handleChange
	};
<div>{{data.uname}}</div>

4 如果要页面中直接使用uname,而不用data.uname,可以用toRef,不加的话uname:data.uname相当于解构赋值,会失去响应式

let data = reactive({uname: "lxc",age: 18,});
    return {
      uname:toRef(data,'uname'),//注意toRef接收2个参数,对象数组名,参数名必须有引号
	};

5 如果上述变量非常多时,每个都toRef很麻烦,可以用…toRefs,就可以在页面上直接用每个变量了

let data = reactive({uname: "lxc",age: 18,});
    return {
      ...toRefs(data)
    };
<div>{{uname}}</div>   <div>{{age}}</div>

6 watch中的变量要return出去,computed中的变量不用return就能使用,他本身返回的就是ref实例,具有响应式

7 reactive包裹数组如何正确赋值,不能整个直接赋值,要一个一个赋值,或者用ref

    const arr = reactive([]);
      const res = [2, 3, 4, 5]; //假设请求接口返回的数据
      // 方法1 失败,直接赋值丢失了响应性
      // arr = res;
      // 方法2 这样也是失败
      // arr.concat(res);
      // 方法3 可以,但是很麻烦
      res.forEach(e => {
        arr.push(e)})

8 复杂数据赋值的几种简洁方法

1   const state = reactive({
      arr: []
    });
    state.arr = [1, 2, 3]
2  const state = ref([])
    state.value = [1, 2, 3]
3  const arr = reactive([])
    arr.push(...[1, 2, 3])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值