当前位置: 首页 > article >正文

vue3.5系列之响应式props解构的几点技巧对比

在最新的版本3.5x中,对props的能力也进行了加强。下面,我们具体看下有哪些变化,给我们带来的新的体验!

体验一

  • 3.5之前解构props的效果
// 子组件
<template>
  <div>
    <h1>响应式props</h1>
    <p>{{ count }}</p>
  </div>
</template>

<script setup>
import { watch, watchEffect } from "vue";
const { count } = defineProps(["count"]);

watchEffect(() => {
  console.log("count", count);
});
watch(
  () => count,
  newVal => {
    console.log("count", newVal);
  }
);
</script>
// 父组件
<template>
  <div>
    <ChildProps :count="count" />
    <button @click="count++">Click me</button>
  </div>
</template>

<script setup>
import ChildProps from "@/components/ChildProps";
import { ref } from "vue";
const count = ref(0);
</script>

请添加图片描述

  • 代码解析
    • 子组件解构父组件传来的count数据,在子组件中是无法watchcount的更新的,如上图
    • 同样的代码,只需更换vue版本到3.5,监听就会生效了,如下图请添加图片描述
    • 解析出来的count,在进行watch时,不能直接传count,要用对应的get
    • 反例:这并不会按预期工作,因为它等价于 watch(props.foo, ...)——我们给 watch 传递的是一个值而不是响应式数据源。实际上,Vue 的编译器会捕捉这种情况并发出警告。
    watch(count, /* ... */)
    

请添加图片描述

体验二

将我们结构出来的props属性,传给自定义的hooks,保持数据的响应性,那怎么做?

  • 实现效果
    请添加图片描述
  • 代码实现
// 自定义hooks
import { toValue, ref, watchEffect } from "vue";
export function useCountAdd(num) {
  let computedCount = ref(0);

  watchEffect(() => {
    computedCount.value = toValue(num) + 1;
  });
  return computedCount;
}
  • 父组件
<template>
  <div>
    <h1>响应式props</h1>
    <p>{{ count }}</p>
    <p>{{ newCount }}</p>
  </div>
</template>

<script setup>
import { useCountAdd } from "@/hooks/useCount";

const { count } = defineProps(["count"]);

// (1)
const newCount = useCountAdd(count);
</script>

(1):如果直接传递解构出来的count,我们的页面是不能及时响应更新的。
请添加图片描述

正例:

const newCount = useCountAdd(() => count);

http://www.kler.cn/news/342197.html

相关文章:

  • 正则表达式-入门
  • 图论day57|建造最大岛屿(卡码网)【截至目前,图论的最高难度】
  • 算法: 前缀和题目练习
  • petalinux 自动登陆 自动启动程序
  • 深入理解 `VARCHAR` 和 `CHAR` 数据类型
  • Java Stream流中的filter()使用方法-详解
  • Mac 需要杀毒软件?
  • 网优学习干货:王者荣耀游戏用户体验洞察及质差识别(2)
  • RTSP 音视频play同步分析
  • Qt_打开其他软件(带参数)
  • Docker容器简介及部署方法
  • IPguard与Ping32敏感内容防护能力对比,两款知名防泄密软件对比
  • C语言刷题 LeetCode 30天挑战 (十)Stack 栈 (MinStack)
  • nginx 启动报错 [emerg] getpwnam(“nginx”) failed
  • 代码随想录算法训练营Day18
  • Internet Download Manager6.42免费版下载神器新体验
  • codetop标签动态规划大全C++讲解(二)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o
  • 在线教育新篇章:SpringBoot系统开发策略
  • Vscode+Pycharm+Vue.js+WEUI+django火锅(三)理解Vue
  • WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?