当前位置: 首页 > 知识库问答 >
问题:

javascript - vue组件内部props,两个相关异步数据,如何确保计算出结果?

景景胜
2023-10-01

一、组件介绍(怎么确保得到a3)

1、组件内有a1,a2,用来接收父组件的传值,需要通过a1,a2来得到一个 a3
2、父组件在使用时a1,a2的来源是通过两个不同的api获取的,a1,a2都是异步的

<script>  export default {    name: 'Test',    props: {      a1: { // 异步数据        type: Array,        default: () => []      },      a2: { // 异步数据        type: Array,        default: () => []      }    },    data() {      return {        a3: []      }    },    watch: {      a1: {        deep: true,        handler() {          if (this.a1 && this.a2) {            this.initA3()          }        }      },      a2: {        deep: true,        handler() {          if (this.a1 && this.a2) {            this.initA3()          }        }      }    },    methods: {      initA3() {        // 对 a1、a2 进行运算后得到 a3,这里都是简化场景        a3 = a1 + a2      }    }  }</script>

二、解决方案(目前的方案)

1、前提条件如下:(1)它是组件,尽量是不去要求父组件去控制api请求顺序,比如async await控制两个请求的顺序(2)a1,a2的来源是可能随时变的,可能通过一个按钮切换这样,不限制父组件的使用
2、目前想的 watch 是对 a1,a2进行监听,然后发生变化时,得到 a3
3、计算属性computed行不通,不能深度监听,因为这个a3是一个副作用了

三、大佬们,想请问下有其他的方案思路,谢谢

共有2个答案

巫晋鹏
2023-10-01

你要理解 MVVM 的设计逻辑。

  1. 传统软件模式中,如果我们要把一个数据显示在视图上,我们通常需要手动控制这个数据的渲染,并且在数据变化时,手动修改渲染出的视图。
  2. 于是我们就要确定数据变化的时机,及时计算、及时修改视图。这个过程往往很费力,会给我们带来茫茫多的代码复杂度。
  3. 而 MVVM 则不然,这种模式会提供数据与视图之间的映射关系,于是我们就可以只操作数据,而不太需要关注数据变化。
  4. 回到你的问题,使用 Vue 之后,我们不需要关注数据是什么时候变化的,只需要利用 computed 得到新的数据,渲染的过程是自动的。
谢俊英
2023-10-01

你可以用computed组合出一个对象,然后watch那个新的对象,避免重复触发

computed:{    tempA3(){        const {a1,a2} = this        retutn {a1,a2}    }},watch:{    tempA3:{        handler(val){            const {a1,a2} = val            if(a1 && a2){                this.initA3()            }        },        deep: true    }}
 类似资料:
  • 问题内容: 我有两个数组,它们的形状为和。我想计算每对可能的行之间和(分别来自和)之间的相关系数。 什么是最快,最Python化的方法?(遍历,对我来说似乎既不快速也不是pythonic。)我期望答案涉及and / or 。现在,我的数组是 s,但是我愿意将它们转换为其他类型。 我期望我的输出是一个带有shape的数组。 注意:当我说“相关系数”时,我指的是皮尔逊积矩相关系数。 以下是一些注意事项

  • 本文向大家介绍JavaScript计算出两个数的差值,包括了JavaScript计算出两个数的差值的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JavaScript计算两个数差的具体代码,供大家参考,具体内容如下 需求 在两个输入框中输入两个数字,点击按钮的时候,计算出两个数字的差并且显示到id为result的div中。 实现代码 上面代码实现刚开始说的需求,希望对学习前端开发的小

  • 问题内容: 假设我有一个包含3列的数据框:日期,股票行情,值(无索引,至少从此开始)。我有很多约会,很多股票,但是每个元组都是唯一的。(但是很显然,同一日期将显示在多行中,因为它将在多个行情中出现,而同一行情显示将在多行中显示,因为它将存在许多日期。) 最初,我的行以特定顺序排列,但没有按任何列进行排序。 我想计算每个股票报价的第一个差异(每日变化)(按日期排序),并将其放在数据框中的新列中。在这

  • 假设我有这两个数组: 如何从ARR2获取arr1中的出现次数。两个数组中的所有字符串都是唯一的,不会有重复的。显然,在这个具体案例中的结果是2。 我试过的: 问题是我必须在很少的情况下使用它,并且变量总是在变化,这取决于您单击的内容,而您不能依赖它的值。 提前谢谢!

  • 我正在编写一个库,该库提供了几个返回“可完成未来”的异步方法。该库具有一个内部线程池,用于执行异步方法的计算工作。 我想确保满足以下两个要求: 返回的“可完成未来”不是由内部线程完成的,因此我的库外部的“可完成未来”链永远不会被库的内部线程池执行 我的异步方法的所有计算都由内部线程池执行,而不是由用户线程(即方法调用方的线程)执行 所以说图书馆有以下阻止方法 和相应的异步方法 第一个要求是通过添加

  • 我正在将道具传递给组件: 在上面的代码中,我已经注释了给出错误的行。如果我删除该行,它会正常工作并且模板渲染正确(我也可以看到{{MessageId}}的预期值)。因此传递数据的逻辑是正确的。 似乎在 data() 中访问 的方式是错误的。那么如何访问数据中的道具呢?