Vue3【十】07利用ref创建根本范例的响应式数据以及ref和reactive区别 ...

打印 上一主题 下一主题

主题 531|帖子 531|积分 1593

Vue3【十】07利用ref创建根本范例的响应式数据以及ref和reactive区别

   ref 也可以创建对象范例的响应式数据,不外要利用.value
ref 处置惩罚对象数据的时候,底层数据还是reactive格式的
reactive 重新分配一个新对象,会失去响应式可以利用Object.assign()来做整体替换,不会丢失响应式
若要利用一个根本范例的响应式数据,必须利用ref
若要利用一个响应式对象成绩不深,ref和reactive都可以
若要利用一个响应式对象,层级比较深,推荐reactive
  案例截图


目次结构


案例代码

Person.vue

  1. <template>
  2.     <div class="person">
  3.         <h1>我是 兜率宫 组件</h1>
  4.         <h2>名字:{{ palace.name }}</h2>
  5.         <h2>数量:{{ palace.no }} </h2>
  6.         <button @click="changeName">修改名字</button>
  7.         <button @click="changeNo">修改数量</button>
  8.         <button @click="showAdd">查看信息</button>
  9.         <button @click="changePalace">修改宫殿</button>
  10.     </div>
  11.     <div class="baxian">
  12.         <h2>八仙都有哪些?</h2>
  13.         <ul>
  14.             <li v-for="item in baxian" :key="item.id">{{ item.name }}</li>
  15.         </ul>
  16.         <button @click="changeFirstName"> 更改第一个名字 </button>
  17.     </div>
  18. </template>
  19. <script lang="ts" setup>
  20. import { ref } from 'vue'
  21. // 数据
  22. // ref 也可以创建对象类型的响应式数据,不过要使用.value
  23. // ref 处理对象数据的时候,底层数据还是reactive格式的
  24. let palace = ref({
  25.     name: '兜率宫',
  26.     add: '兜率宫。兜率宫位于江西省鹰潭市的龙虎山,是道教的重要圣地之一。它被认为是太上老君的道场,位于离恨天之上,是道教神话中兜率天宫的一部分。兜率宫原址位于龙虎山天门山,有着悠久的历史和文化背景。',
  27.     no: 1
  28. })
  29. let baxian = ref([
  30.     { id: 'b01', name: '铁拐李' },
  31.     { id: 'b02', name: '汉钟离' },
  32.     { id: 'b03', name: '张果老' },
  33.     { id: 'b04', name: '吕洞宾' },
  34.     { id: 'b05', name: '何仙姑' },
  35.     { id: 'b06', name: '蓝采和' },
  36.     { id: 'b07', name: '韩湘子' },
  37.     { id: 'b08', name: '曹国舅' },
  38. ])
  39. console.log(palace)
  40. console.log(baxian)
  41. // reactive 重新分配一个新对象,会失去响应式可以使用Object.assign()来做整体替换,不会丢失响应式
  42. function changePalace() {
  43.     Object.assign(palace.value, {
  44.         name: '天师殿',
  45.         add: '天师殿,是道教的重要圣地之一。',
  46.         no: 20
  47.     })
  48. }
  49. // 方法
  50. function changeFirstName() {
  51.     baxian.value[0].name = '孙悟空'
  52. }
  53. function showAdd() {
  54.     alert(palace.value.add)
  55. }
  56. function changeName() {
  57.     palace.value.name = palace.value.name == "兜率宫" ? '永乐宫' : '兜率宫'
  58.     console.log(palace)
  59. }
  60. function changeNo() {
  61.     palace.value.no += 1
  62.     console.log(palace.value.no)
  63. }
  64. // 若要使用一个基本类型的响应式数据,必须使用ref
  65. // 若要使用一个响应式对象成绩不深,ref和reactive都可以
  66. // 若要使用一个响应式对象,层级比较深,推荐reactive
  67. </script>
  68. <style scoped>
  69. .person {
  70.     background-color: #ff9e4f;
  71.     box-shadow: 0 0 10px;
  72.     border-radius: 30px;
  73.     padding: 30px;
  74. }
  75. button {
  76.     margin: 0 10px;
  77.     padding: 0 5px;
  78.     box-shadow: 0 0 5px;
  79.     ;
  80. }
  81. </style>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表