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的项目逻辑中。


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


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


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


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


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


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


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


相关文章
|
10天前
|
监控 JavaScript 前端开发
使用Vue.js开发员工上网行为监控的实时数据展示页面
使用Vue.js开发的实时员工上网行为监控页面,展示员工访问的网站、应用和时间等数据。页面响应式设计,适应不同设备。通过Vue组件显示实时数据,如`&lt;li v-for=&quot;activity in activities&quot;&gt;`循环渲染。数据定时更新,利用Vue的生命周期钩子和axios从服务器获取并自动刷新,确保数据的时效性。该页面有助于管理者即时了解员工网络活动,保障企业网络安全和资源管理。
56 5
|
17天前
|
JavaScript 前端开发 开发者
vue3+ts配置跨域报错问题解决:> newpro2@0.1.0 serve > vue-cli-service serve ERROR Invalid options in vue.
【6月更文挑战第3天】在 Vue CLI 项目中遇到 &quot;ERROR Invalid options in vue.config.js: ‘server’ is not allowed&quot; 错误是因为尝试在 `vue.config.js` 中使用不被支持的 `server` 选项。正确配置开发服务器(如代理)应使用 `devServer` 对象,例如设置代理到 `http://xxx.com/`: ```javascript module.exports = { devServer: {
28 1
|
17天前
|
JavaScript 前端开发 数据安全/隐私保护
vue3+ts+elementplus写一个登录页面教程
【6月更文挑战第3天】本文介绍了如何使用 Vue 3 和 TypeScript 创建一个登录页面。首先,需安装 Vue CLI,然后创建新项目并启用 TypeScript 支持。接着,创建 `Login.vue` 组件,设计登录表单,包括用户账号、密码和验证码字段,并实现相关验证规则。页面样式包括背景、登录框和按钮等元素的布局与样式。最后,展示了`&lt;script&gt;`部分的代码,包括表单验证逻辑、生成验证码的函数以及登录提交处理。文章还提供了一个登录页面的截图和完整代码示例。
77 1
|
9天前
|
JSON JavaScript 前端开发
在Vue3项目中,Vite起到的作用及其可以做的事情
Vite是Vue 3项目的关键快速开发服务器和高效的热模块替换(HMR)。它的亮点包括:使用ES模块实现快速启动和动态加载,模块级别HMR提升开发效率,Rollup打包优化生产构建。此外,Vite还支持插件系统、自定义配置、静态资源处理和现代JS特性。通过`npm create vite`可快速搭建Vue项目,配置文件`vite.config.js`可定制行为,`.env`文件管理环境变量。Vite优化了开发与构建流程,提高开发者效率并保证构建性能。
|
6天前
|
JavaScript 前端开发 API
什么是响应式❓Vue2/Vue3中响应式的原理
什么是响应式❓Vue2/Vue3中响应式的原理
17 2
|
6天前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
17 1
|
12天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的共享单车数据存储系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的共享单车数据存储系统附带文章源码部署视频讲解等
11 1
|
12天前
|
JavaScript
vue数据的双向绑定
vue数据的双向绑定
|
6天前
|
开发工具 git
vite+vue3+ts从0到1搭建企业级项目(4)
vite+vue3+ts从0到1搭建企业级项目
23 0
|
6天前
|
存储 JavaScript API
vite+vue3+ts从0到1搭建企业级项目(3)
vite+vue3+ts从0到1搭建企业级项目
19 0