vue3获取数据的注意点

简介: vue3获取数据的注意点

场景描述


在使用vue3的时候。我们很多人喜欢一个页面分成几个几个部分来写


这样做的目的是为了区分。


做的彼此的逻辑互相独立,互不干扰


但是有的时候,我们可能会去获取不属于自己区域的函数


这个时候我们有集中方式去获取函数呢??


传参的方式


<script>
import { reactive } from '@vue/reactivity'
export default {
  setup () {
    let { dataA }=oneFun(dataB);
    let { dataB }=twoFun(dataA);
    return {dataA,dataB }
  }
}
// 这个函数包含自己的业务以及自己的数据。
function oneFun(dataB){
  let dataA=reactive({
     tbaleData:[],
     index:1,
  })
  console.log('通过传递参数的形似获取twoFun中的数据',dataB );
  return {dataA}
}
// 这个函数包含自己的业务以及自己的数据。
function twoFun(dataA){
  let dataB=reactive({
     list:[ {name:'你是我的荣耀'}, {name:'司藤'}, ]
  })
  console.log('通过传递参数的形似获取oneFun中的数据',dataA );
  return {dataB}
}
</script>


1425695-20210815230525575-1446718272.png


为什么是undefined呢???


为什么我获取dataB中的数据是undefined呢?why????


因为js执行是有顺序行的。


问题就出现这下面两行代码上


let { dataA }=oneFun(dataB);


let { dataB }=twoFun(dataA);


当我们执行 oneFun函数的时候;


这个时候dataB 并没有解构结构出来。


所以是undefined了。


如何处理undefined


那就是将dataA中的数据分离出去。


这样就可以解决了


<script>
import { reactive } from '@vue/reactivity'
export default {
  setup () {
    // 将dataA抽离出来了
    let dataA=reactive({
      tbaleData:[],
      index:1,
    })
    // dataB中的数据仍然在twoFun函数体中
    let { dataB }=twoFun(dataA);
    oneFun(dataB); //调用oneFun函数
    return {dataA,dataB }
  }
}
// 这个函数包处理业务
function oneFun(dataB){
  console.log('通过传递参数的形似获取twoFun中的数据',dataB );
}
// 这个函数包含自己的业务以及自己的数据。
function twoFun(dataA){
  let dataB=reactive({
     list:[ {name:'你是我的荣耀'}, {name:'司藤'}, ]
  })
  console.log('通过传递参数的形似获取oneFun中的数据',dataA );
  return {dataB}
}
</script>

1425695-20210815231807483-182117412.png


有没有更好的写法呢?


如果在A函数中需要dataB中的数据,B函数需要dataA中的数据


跟人建议不要这样套娃操作


最好的是将dataB和dataA放在同一个reactive中就行了。


我非常推荐这样的做法。


 setup () {
    let dataA=reactive({
      dataA:[],
      dataB:1,
    })
  }

这样的好处需要数据是处理更加的方便了。


上面我说到在A函数中需要dataB中的数据,B函数需要dataA中的数据


这样互相调用其中一个肯定是undefined


也不要出现 A函数去调用B函数,B函数中去调用A函数。


这样是非常糟糕的哈。


通过函数中调用


<script>
import { reactive } from '@vue/reactivity'
export default {
  setup () {
    let { getdataA }=oneFun();
    let { getdataB }=twoFun();
    return {getdataA,getdataB }
  }
}
function oneFun(){
  let dataA=reactive({
    tbaleData:[],
    index:1,
  })
  // 通过函数的获取获取形零国外一个函数中的值
  console.log("==>", twoFun().getdataB() ); 
}
function twoFun(){
    let dataB=reactive({
      list:[ {name:'你是我的荣耀'}, {name:'司藤'}, ]
    })
    //调用该函数可以获取该函数体内部的值
    function getdataB(){
      return dataB
    } 
    return { getdataB }
}
</script>

1425695-20210816212022369-2088270017.png


有交叉的逻辑如何处理


最近在使用vue3的项目逻辑中。


发现一个很有意思的现象?


表格中的编辑这个逻辑有交叉【点击编辑打开一个对话框】。


它既可以属于表格中的逻辑,也可以属于后面对话框中的逻辑。


经过我反复的思考,我决定把它划分在对话框这个逻辑区域。


以为点击表格中的的编辑虽然是在表格中发生的,但是最后对话框中的保存按钮。


会发送一个请求。打开弹窗只是一个开始。最后结束的是弹窗中的保存按钮


所以,最后一个是在那个区域发生的,就应该属于哪一个区域


相关文章
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
1447 139
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
1643 5
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
763 1
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
1360 11
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
853 0
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
1330 1
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
1405 17
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
716 0
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
462 0
|
JavaScript 前端开发 算法
Vue 3 和 Vue 2 的区别及优点
Vue 3 和 Vue 2 的区别及优点
1041 12