当前位置:   article > 正文

vue3组合式api(reactive, ref, toRefs, watch, watchEffect)_组合式api created

组合式api created

Vue3 的一大特性函数 ---- setup

  1、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的

  2、setup函数是 Composition API(组合API)的入口

  3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

二、setup函数的注意点

  1、由于在执行 setup函数的时候,还没有执行 Created 生命周期方法,所以在 setup 函数中,无法使用 data 和 methods 的变量和方法

  2、由于我们不能在 setup函数中使用 data 和 methods,所以 Vue 为了避免我们错误的使用,直接将 setup函数中的this修改成了 undefined

  3、setup函数只能是同步的不能是异步的

  1. <template>
  2. <div>
  3. <h1>{{index}}</h1>
  4. <h1>{{name}}</h1>
  5. <button @click="changeNmae()">改变</button>
  6. <button @click="changeObj()">改变obj</button>
  7. <h1>{{obj.uname}}</h1>
  8. <h4>{{uname}}</h4>
  9. <hr>
  10. <h1>{{num}}</h1>
  11. <button @click="changeNum()">改变num</button>
  12. <hr>
  13. <h3>computed</h3>
  14. <h2>{{couter}}</h2>
  15. <h2>{{fullname}}</h2>
  16. </div>
  17. </template>
  18. <script>
  19. import {reactive, ref, toRefs, watch, watchEffect,computed} from 'vue'
  20. export default {
  21. name: "TabBarItem",
  22. data() {
  23. return {
  24. index: 'index'
  25. }
  26. },
  27. created() {
  28. },
  29. setup() {
  30. //======================== ref reactive toRefs ===========================
  31. let name =ref('小四') // ref 声明简单类型的数据,并且获得响应式
  32. function changeNmae(){
  33. name.value = 'hehe'
  34. console.log(name.value)
  35. }
  36. let obj = reactive({ // reactive 声明数组,对象类型的数据, 并且获得响应式
  37. uname: "zhangsan",
  38. age: 18,
  39. isSex: { sex: '女' },
  40. })
  41. function changeObj() {
  42. // console.log(this)
  43. obj.uname = '李四'
  44. console.log(obj.uname)
  45. }
  46. // ======================== watch ===========================
  47. let num = ref(100)
  48. let count = ref(200)
  49. function changeNum() {
  50. // console.log(this)
  51. num.value = 200
  52. console.log(num.value)
  53. }
  54. // 监控方式(1) 监控num值的变化
  55. watch(num,(val,preVal)=>{
  56. //val为修改后的值,preVal为修改前的值
  57. console.log("num",val,preVal)
  58. },
  59. {
  60. //如果加了这个参数,值为true的话,就消除了惰性,watch会在创建后立即执行一次
  61. //那么首次执行,val为默认值,preVal为undefined
  62. immediate:true,
  63. //这个参数代表监听对象时,可以监听深度嵌套的对象属性
  64. //比如message是一个对象的话,可以监听到message.a.b.c,也就是message下的所有属性
  65. deep:true,
  66. }
  67. )
  68. // 监控方式(2) 全局监控变化的值 默认自动执行
  69. watchEffect(()=>{
  70. console.log('==watchEffect',num.value)
  71. console.log('####watchEffect',obj.uname)
  72. })
  73. // ======================== computed ===========================
  74. let couter = computed(() => {
  75. return num.value + count.value
  76. })
  77. let fullname = computed(() => {
  78. return obj.uname + obj.age + obj.isSex.sex
  79. })
  80. //使用es6扩展运算符后,失去响应式 ,通过toRefs获取响应式
  81. return {name,changeNmae,changeObj,...toRefs(obj),obj,num,changeNum,couter,fullname}
  82. },
  83. methods:{
  84. }
  85. }
  86. </script>

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/872776
推荐阅读
相关标签
  

闽ICP备14008679号