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

javascript - vue2项目,页面调异步请求初始化时,请求方法应该写在哪里,该怎么写才比较好?

杜经艺
2023-05-06

正常来说,被缓存的组件应该把初始化的请求写在activated里,没被缓存的应该写在created或者mounted里,我们项目是用meta里的keepAlive字段来控制当前路由是否缓存,用refresh字段来控制页面是否需要刷新数据。目前代码是这样的,但是感觉有点怪怪的,有没有办法优化呢?

  activated() {
    if (this.$store.state.user.refresh) {
      this.$store.commit('refresh', false)
      this.setConfigData()
      this.initData()
    }
  },
  created() {
    if (!this.$store.state.user.refresh) {
      this.setConfigData()
      this.initData()
    }
  },

共有2个答案

爱刚捷
2023-05-06

封装一个单独方法:

methods: {
  fetchData() {
    this.setConfigData()
    this.initData()
  }
},
activated() {
  if (this.$store.state.user.refresh) {
    this.$store.commit('refresh', false)
    this.fetchData()
  }
},
created() {
  if (!this.$store.state.user.refresh) {
    this.fetchData()
  }
},
邬宜然
2023-05-06

我大概的理解下你的意思,现在的是否缓存和刷新数据的逻辑判断都是写在组件里面的,显得有点麻烦。
其实你可以这样做:keep-alive 代码可以结合 v-if 进行包裹,如果 meta 中的 keepAlive 为 true 进行缓存,否则不进行缓存。

<keep-alive>
  <router-view v-if="$route.meta.keepAlive" />
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />

这样,各个组件内部还是正常的逻辑,没有被缓存的组件每次重新加载就会请求数据,被缓存的组件初次加载后再次加载就不再请求数据了。除非在activated钩子请求了数据。

组件钩子执行顺序:
当引入keep-alive 的时候,页面第一次进入,钩子的触发顺序 created -> mounted -> activated,退出时触发 deactivated。
当再次进入(前进或者后退)时,只触发 activated。

 类似资料:
  • 场景是这样的,我们的单据新建页点击提交按钮后,拿到单据ID,然后根据单据ID触发工作流初始化接口获取到工作流人员信息。问题在于,点击提交后,该怎么展示选人比较好,一个弹框?或者在原有页面下新增选人信息?更或者关闭当前页,在另一个页面弹框选人?想听听各位的想法,你们业务上是怎么做的。

  • 如图所示,上面的线height为1px,width为662px;下面4条线height为1px,width为7px,颜色都为#A7A7A7

  • 本文向大家介绍全面解析iOS中同步请求、异步请求、GET请求、POST请求,包括了全面解析iOS中同步请求、异步请求、GET请求、POST请求的使用技巧和注意事项,需要的朋友参考一下 先给大家分别介绍下iOS中同步请求、异步请求、GET请求、POST所代表的意思,然后在逐一通过实例给大家介绍。 1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进

  • 下图这是这个页面的所有代码,我想像vue的mounted一样,刚进页面就请求接口,请问我该怎么写? 另外,这应该属于是typescript吧?完全看不懂一脸懵 并且,我的接口不是固定地址,后端那可能会上传到不同的服务器,如何像vue一样配置proxy? 在这里先谢谢各位大哥大姐的解答,小弟感激不尽!

  • 由于请求的不同用法和注释,我一直很困惑

  • 列数有3列,并且是一个树形结构的表格,目前H5用的是vant组件库,应该怎么展示比较好呢?希望有图片示例最好。