根据项目的需求,需要将获取报表id的方法写成一个hooks,在hooks是否使用监听watch,碰到了一系列的问题。在写hooks的时候,在hooks里面写了监听watch,写了一个响应式的数据,但是在页面上调用找个hooks的,响应式的数据写在setup内一直拿不到。
在此之前需要搞清楚一个问题:

  • watch在vue3中是什么时候执行的。

vue2生命周期与vue3生命周期相对比

vue2 vue3
beforeCreate setup()
created setup()
beforeMount onBeforeMount
mounted onMounted
beforeUpdate onBeforeUpdate
updated onUpdated
beforeDestroy onBeforeUnmount
destroyed onUnmounted
activated onActivated
deactivated onDeactivated
errorCaptured onErrorCaptured

监听watch在被触发的时候,是在beforeCreatecreated 之间被触发,进行初始化的,而setup在创建组件的时候是在beforeCreatecreated 之前执行的。

最初的写法:

export default async function useReport(busTypeId: any) {const route = useRoute();const report = ref();watch(() => busTypeId,async () => {if (isEmpty(busTypeId) || busTypeId == undefined) {busTypeId = route.path.split('/').slice(-1)[0];}const { createMessage } = useMessage();if (busTypeId?.length >= 19) {await getReportByBustypeId({ busTypeId }).then((res) => {report = res.id;}).catch((err) => {createMessage.error('获取信息失败' + err);});}},{ immediate: true,deep: true },);return { report };
}

页面引用:

<script lang="ts" setup>import useReport from '/@/views/busModel/report/useReport';const { report } = useReport ();console.log(report , 'report report 1');/**查询 */async function handleQuery() {try {console.log(report , 'report report 2');} catch (e) {console.log(e);}}</script>

这个时候写的看着也没有问题,但是就是在页面调用的时候无法获取到return出来的数据。在查询事件外边写的打印,打印的时候显示无数据,但是在查询里面写的就有数据。并且将监听事件直接写到页面上时,只有在监听事件内能拿到需要的数据,在外边就拿不到。这就是因为setup的执行是在beforeCreatecreated 之前执行的,而监听watch是在beforeCreatecreated 之间执行的,所以一直拿不到数据。

更改后的写法:

export default async function useReport(busTypeId: any) {const route = useRoute();const report = ref();if (isEmpty(busTypeId) || busTypeId == undefined) {busTypeId = route.path.split('/').slice(-1)[0];}const { createMessage } = useMessage();if (busTypeId?.length >= 19) {await getReportByBustypeId({ busTypeId }).then((res) => {report.value = res.id;}).catch((err) => {createMessage.error('获取报表信息失败' + err);});}return { report };
}

页面调用:

<script lang="ts">import useReport from '/@/views/busModel/report/useReport';const report = ref();onMounted(async () => {await useReport().then((res) => {report.value = res.report.value;});});
</script>

将监听watch去掉之后,这样就可以拿到想要的数据了。

vue3 hooks碰到的问题相关推荐

  1. vue mixins(vue3 hooks)动态获取div高度

    之前转载过一篇文章: https://blog.csdn.net/qq_37167049/article/details/103084927 可以动态计算div 高度,但是比较繁琐的痛点是: 需要在每 ...

  2. 《前端图形学实战》几何学在前端边界计算中的应用和原理分析

    前言 之所以会开设这个专栏, 是为了弥补部分程序员对代数和几何学的短板(当然也是为了巩固我的数学基础), 同时在实用价值上, 代数和几何学在编程界也起到了非常重要的推动作用, 比如我们看到的各种建模软 ...

  3. Vue3必会技巧-自定义Hooks

    Vue3自定义Hooks定义: 个人理解:一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现高内聚低耦合的目标,应该都能算是hook: 为什么Vue3要用自定义Hook?: 结论:就是为了让C ...

  4. Vue3 生命周期Hooks函数与调度器Scheduler的原理

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 写在最前:本文章的目标 Vue3的生命周期的实现原理是比较简单的,但要理解整个Vue3的生命 ...

  5. 我居然不知道Vue3可以使用hooks函数实现代码复用?

    每天都要开心(▽)哇: 项目开发过程中,我们会遇到一些情况,就是多个组件都可以重复使用的一部分代码逻辑,功能函数,我们想要复用,这可怎么办呢? VUE2我们是怎么做的呢? 在vue2 中有一个东西:M ...

  6. 如何在Vue3中使用Hooks

    在Vue的options Api时代,mixins是我们抽离一个功能的重要手段,而在使用composition Api的Vue3时代,我们可以用hooks来实现类似mixins的功能. 相比mixin ...

  7. vue3项目的创建和git提交规范,eslint ,cz,hooks

    ESLint Commitizen Git Hooks (--forece 强制安装)` vue create (项目文件名) 选择 'Manually celect features' //手动配置 ...

  8. 在 react 里写 vue3 ? 还写了自定义 hooks和 Hoc 构建了响应式 !

    作者 | 

  9. 我的项目用Vue3了,真香!

    来源:代码与野兽 https://juejin.cn/post/6950487211368251399 背景 近期在研发一套物联网设备管理系统,其主要用途是将公司旗下所负责智能园区中的硬件设备通过物联 ...

最新文章

  1. swift 之SnapKit 动画
  2. 三层交换机不能完全取代路由的作用
  3. 【Tiny4412】最小网络文件系统制作
  4. JSP中的include指令
  5. java 标记_java – 标记注释与标记接口
  6. 使用pkg打包编译nodejs程序,手动设置缓存内容
  7. DE25 Homogeneous Linear Systems with Constant Coefficients
  8. sql数据库身份验证登录
  9. 程序员常用的软件(附下载地址)
  10. 蛋糕甜品小程序有哪些,这3款小程序值得收藏!
  11. 翟菜花:搭上营销快通车的乳业,又是如何玩转互联网营销时代的?
  12. LDUOJ spj 修改
  13. 「需求分析」用户故事和用例是一回事吗?
  14. 有哪些电容笔值得推荐?值得买的电容笔测评
  15. 2022年第五届中青杯数学建模-时间序列预测模型及基于多特征条件下的决策优化
  16. 【个人整理】一文看尽目标检测算法SSD的核心架构与设计思想
  17. 【LeetCode】跳跃游戏Ⅰ~Ⅵ(我真的跳晕了@_@)
  18. linux 重启nginx命令
  19. 【强化学习论文合集】三十五.2021神经信息处理系统大会论文(NIPS2021)
  20. 进入bios或者安全模式

热门文章

  1. NG Toolset开发笔记--5GNR Resource Grid(50)
  2. 【券后价12.90元】【包邮】铁观音茶叶浓香型安溪2019新茶乌龙茶散装袋装小包装礼盒装250克...
  3. Autoware.Universe:如何在Carla 0.9.13上运行
  4. vue中动态修改网页图标
  5. 图片服务器上图片的管理网站上传与前台显示
  6. 03-树1 树的同构 (25分)
  7. 九龙证券|全面注册制落地后IPO新增注册准备程序
  8. openjudge 1.8.4 错误勘测
  9. excel 魔法卡片_在Excel中制作情人节卡片
  10. 关于Data cardinality is ambiguous:x sizes:y sizes: Make sure all arrays contain the same numbers