当前位置:   article > 正文

Vue3+Vite实现工程化,响应式ref和reactive_vue3 vite reactive

vue3 vite reactive

      此处的响应式是指:数据模型发生变化时,自动更新DOM树内容,页面上显示的内容会进行同步变化,vue3的数据模型不是自动响应式的(Vue2中默认是响应式的),需要我们做一些特殊的处理

1、实现+ - 按钮数字加一减一

  1. <script setup>
  2. let counter = 0;
  3. function show() {
  4. alert(counter)
  5. }
  6. </script>
  7. <template>
  8. <div>
  9. <button @click="counter--">-</button>
  10. {{counter}}
  11. <button @click="counter++">+</button>
  12. <hr>
  13. <!--此案例,我们发现counter值,会改变,但是页面不改变!默认Vue3的数据是非响应式的!-->
  14. <button @click="show()">显示counter值</button>
  15. </div>
  16. </template>

2、响应式实现关键字ref

                ref 可以将一个基本类型的数据(如字符串,数字等)转换为一个响应式对象。ref只能包裹单一元素。

  1. <script setup>
  2. //从vue中引入ref方法
  3. import {ref} from "vue";
  4. let counter = ref(0);
  5. //函数中要操作ref处理过的数据,需要通过.value形式
  6. let decre=()=>{
  7. counter.value--;
  8. }
  9. let incre=()=>{
  10. counter.value++;
  11. }
  12. function show() {
  13. alert(counter.value)
  14. }
  15. </script>
  16. <template>
  17. <div>
  18. <button @click="counter--">-</button>
  19. <button @click="decre">-</button>
  20. <button @click="decre()">-</button>
  21. {{counter}}
  22. <button @click="counter++">+</button>
  23. <button @click="incre">+</button>
  24. <button @click="incre()">+</button>
  25. <hr>
  26. <button @click="show()">显示counter值</button>
  27. </div>
  28. </template>
  •  在上面的例子中,我们使用ref包裹了一个数字,在代码中给这个数字加1后,试图也会跟着动态更新。需要注意的是,由于使用了ref,因此需要在访问改对象时使用.value来获取其实际值。

3、响应式实现关键字reactive

            我们可以使用reactive()函数创建一个响应式对象和数组:

  1. <script setup>
  2. import {reactive, ref} from "vue";
  3. /*
  4. let person=ref({
  5. age: 20
  6. })
  7. //函数中要操作ref处理过的数据,需要通过.value形式
  8. let decre=()=>{
  9. person.value.age--;
  10. }
  11. let incre=()=>{
  12. person.value.age++;
  13. }
  14. function show() {
  15. alert(person.value.age)
  16. }
  17. */
  18. let person=reactive({
  19. age: 20,
  20. })
  21. let decre=()=>{
  22. person.age--
  23. }
  24. let incre=()=>{
  25. person.age++
  26. }
  27. function show() {
  28. alert(person.age);
  29. }
  30. </script>
  31. <template>
  32. <div>
  33. <button @click="person.age--">-</button>
  34. <button @click="decre">-</button>
  35. <button @click="decre()">-</button>
  36. {{person.age}}
  37. <button @click="person.age++">+</button>
  38. <button @click="incre">+</button>
  39. <button @click="incre()">+</button>
  40. <hr>
  41. <button @click="show()">显示person的年龄</button>
  42. </div>
  43. </template>

 4、ref适用开发场景

  • 包装基本数据类型:ref主要用于包装基本类型数据(如字符串、数字等),即只有一个值的数据,如果你想监听这个值的变化,用ref最方便。在组件中使用时也很常见。
  • 访问方式简单:ref对象在访问时与普通的基本类型值没有太大区别,只需要.value访问其实际值即可。

 5、reactive适用开发场景

  • 包装复杂对象:reactive可以将一个普通对象转化为响应式对象,这样在数据变化时会自动更新界面,特别适用于处理复杂对象或者数据结构
  • 需要递归监听的属性:使用reactive可以递归追踪所有响应式对象内部的变化,从而保证界面的自动更新

 7、总结

  • 综上所述,ref适合与简单情形下的数据双向绑定,对于只有一个字符等基本类型数据或自定义组件等情况,建议可以使用ref;而对于对象、函数等较为复杂的数据结构,以及需要递归监听的属性变化,建议使用reactive。当然,在实际项目中根据需求灵活选择也是十分必要的。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/970901
推荐阅读
相关标签
  

闽ICP备14008679号