vue3解构defineProps失去响应式解决办法
  fBRHAdLS020g 2023年11月24日 20 0

 

先看下面的代码

const props = defineProps({
  showName: {
    type: String,
    default: "123",
  },
});
const { showName } = props;

我们发现这个东西虽然可以展示到页面但是它失去了响应式。

那么正确的使用姿势应该如下

const props = defineProps({
  showName: {
    type: String,
    default: "123",
  },
});
// const { showName } = props;
const { showName } = toRefs(props);

 

toRef 和 toRefs 的作用、用法、区别

 

  • toRef: 复制 reactive 里的单个属性并转成 ref
  • toRefs: 复制 reactive 里的所有属性并转成 ref

 

let info = reactive({
      name: 'Tony',
      greet: 'Hello'
    })
	// 复制 info 里的 greet 属性
    let rGreet = toRef(info, 'greet')

 

let info = reactive({
      name: 'Tony',
      greet: 'Hello'
    })
	// 复制整个 info
    let rInfo = toRefs(info)

 

 

注意要点

  • template 要想访问 toRefs 的值,需要带上 .value 如果不带上,就会出现双引号。
  • template 要想访问 toRef 的值,不需要带上 .value

 

<template>
  <div>{{ p.showName }}</div>
  <div>{{ p.showName.value }}</div>
</template>
<script setup>
const props = defineProps({
  showName: {
    type: String,
    default: "123",
  },
});


const p = toRefs(props);
console.log(p.showName.value);


// const { showName } = toRefs(props);
// const { showName } = props;
</script>

vue3解构defineProps失去响应式解决办法_双引号

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

推荐阅读
fBRHAdLS020g