站在Vue的角度,对比鸿蒙开发中的状态管理

​

开局一张图 内容全靠手搓

​看到图片没:State就是状态的意思 UI就是页面的意思 研究的就是数据变了页面变

事件驱动和数据驱动的区别

所以又找了两张图

看到虚拟DOM的都是数据驱动 (这个虚拟DOM 就会产生diff算法,面试也喜欢问,其实没啥用)

​

看到事件触发 事件队列的都是事件驱动

​

事件驱动代码实操一个例子

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="box"></div>
    <button id="btn">点击</button>
</body>
<script>
        let  box = document.getElementById("box")
        let  btn = document.getElementById("btn")

        btn.onclick = function(){
            box.innerHTML = "我是大雷神"
        }

</script>

</html>

点击按钮 触发事件, 事件找到box元素,找到以后就可以修改里面的内容,就是一个典型的事件驱动

热身结束

先创建一个vue的项目 用的是最新的Vite

sql 复制代码
npm create vue@latest

如果vite构建项目不会,可以看这个学习文档 Vite构建项目

数据的声明和使用

vue中声明响应式数据

xml 复制代码
<template>
  <div>
      数据 {{ num }}
      <button @click="change">修改</button>
  </div>
</template>


<script setup lang="ts">
import  {ref,reactive,toRefs,toRef,shallowRef,shallowReactive,customRef} from  "vue" 

let  num  = ref<number>(10);//声明

let change = ()=>{
  num.value++
}

</script>

解释一下

​

就可以做到数据改变 页面效果跟着变

来个面试题

import {ref,reactive,toRefs,toRef,shallowRef,shallowReactive,customRef} from "vue"

这里引入的这些都是啥区别

鸿蒙中声明响应式数据

less 复制代码
@Entry
@Component
struct Myvue {

  @State  num:number = 10;

  build() {
    Column() {
        Text(`${this.num}`)
         Button("修改").onClick(()=>{
           this.num++;
         })
    }
    .height('100%')
    .width('100%')
  }
}

代码解析

​

1:声明的内容需要写在Build前 2:声明需要使用 @State

3:变量需要有类型 4:修改的时候需要带this

vue中声明非响应式数据

修改代码 请问点击按钮n会变吗?

xml 复制代码
<template>
  <div>
      数据 {{ num }} 和 {{ n }}
      <button @click="change">修改</button>
  </div>
</template>


<script setup lang="ts">
import  {ref,reactive,toRefs,toRef,shallowRef,shallowReactive,customRef} from  "vue" 

let  num  = ref<number>(10);//声明

let n = 666;

let change = ()=>{
  num.value++
  n++;
  console.log(n);
}

</script>

答案是点击以后 n和num在页面都更新

点两下的结果

​

这么看的话,n是不是也是响应式数据???? n肯定不是响应式数据 ,只要注释掉一行代码即可

​

为什么? (用最新版本的Vue3哈,别用老的)留给会Vue的大哥们 在评论区回答吧

鸿蒙中声明非响应式数据

less 复制代码
@Entry
@Component
struct Myvue {

  @State  num:number = 10;
  private   n:number = 999;//非响应式数据  

  build() {
    Column() {
        Text(`${this.num}`)
        Text(`${this.n}`)
         Button("修改").onClick(()=>{
           this.num++;
           this.n++;
         })
    }
    .height('100%')
    .width('100%')
  }
}

​

vue中嵌套数据的响应式

先声明数据

xml 复制代码
<template>
  <div>
     {{ info.data.num }}
     <button @click="change">修改数据</button>
  </div>
</template>


<script setup lang="ts">
import  {ref,reactive,toRefs,toRef,shallowRef,shallowReactive,customRef} from  "vue" 

let  info  = ref({ //嵌套数据
  data:{
    num:10
  }

})
let change = ()=>{
  info.value.data.num++;
}

</script>

没有任何问题 数据变页面变化

鸿蒙中嵌套数据的响应式

less 复制代码
interface dataModel{
  num:number
}

@Entry
@Component
struct Myvue {

  @State  info:infoModel = {
    data:{
      num:10
    }
  }


  build() {
    Column() {
      Text("数据为"+this.info.data.num)
      Button("修改").onClick(()=>{
        this.info.data.num++;
      })
    }
    .height('100%')
    .width('100%')
  }
}

代码解析

​

发现在鸿蒙中不能像Vue那样直接修改嵌套数据 直接修改的数据页面不会更新

解决方法直接更新对象 其实这个问题在Vue2中也存在,只是后来更新了,因此还有面试题问Vue2和Vue3中数据更新的问题和原理

​

这样修改就可以了,这是鸿蒙第一版的问题,现在推荐使用V2的状态管理来做

鸿蒙中V2的状态管理

​

鸿蒙中V2的状态管理文档

未完待续,下一篇接着讲 这种数据在页面的显示

鸿蒙官方学习地址

​

相关推荐
熊猫钓鱼>_>6 小时前
碰一碰无网近场文件快传与断点续传【鸿蒙心迹】
华为·交互·harmonyos·arkts·鸿蒙·openharmony·鸿蒙心迹
hhhjhl13 小时前
开源鸿蒙平台 KMP_CMP 三方库「Clikt」适配全流程
华为·开源·harmonyos
熊猫钓鱼>_>14 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
Goway_Hui15 小时前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
正在走向自律16 小时前
HarmonyOS 手机/平板远程控制 Windows 电脑实践指南
智能手机·电脑·harmonyos·todesk·远程工具
熊猫钓鱼>_>17 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
aqi0018 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
熊猫钓鱼>_>18 小时前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
Goway_Hui19 小时前
【KMP for OpenHarmony】Cache4k 0.14.0 鸿蒙适配
华为·kotlin·harmonyos