zoukankan      html  css  js  c++  java
  • 记录vue中一些有意思的坑

    记录vue中一些有意思的坑

    'message' handler took 401ms

    在出现这个之前,我一直纠结于 是如何使用vue-router或者不使用它,通过类似的v-if来实现。结果却出现这个问题,吓得我赶紧使用v-if,结果问题依旧存在。心里拔凉拔凉的

    解决方案

    • 在查看别人方案时,才发现是自己为了不使用他人插件,只单纯拿其数据,不曾想,数据源过大,导致编译过程时间过长,把其去掉就好了。然后我的vue-router被我都换掉了。不过也无所谓了,路由传参时,若不想在地址栏中显示,一刷新传过来的值都没有了,不如使用vuex实在。另外组件懒加载,也可以使用,不在意了。不过还是想使用路由,感觉简介,条例清晰些
    vuex 中 actions 异步使用,结合axios数据请求

    最近一直在考虑,有没有必要每次请求都要经过 vuex 的 actions,同时也发现一些痛点,就是有些过程是需要在当前页面进行请求更好,因为需要及时显示值,而这些值首次并不能是空,及时之后值请求到,方法无法再次调用,导致值无法及时显示。只能在当前页面请求较好,而且这个值只是当前这一个位置使用而已。
    加上兄弟组件较多,涉及到不同组件同时请求一个接口,这个适合放在vuex中,因而个人建议,可以确定这个接口请求的数据只有这里使用,且有且仅有当前这个组件进行数据请求,不涉及到其他组件请求时,直接放在当前页面进行请求即可。 既可以减少vuex的负担,也可以 减少代码量,因为为了拿到请求后的数据,需要些许多不必要的代码。

    使用封装的fetch.js时,考虑更加灵活些
    import axios from 'axios'
    import { baseUrl } from './../apis/api.js'
    import { Loading } from 'element-ui'
    axios.defaults.baseURL = baseUrl
    axios.defaults.headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
    axios.defaults.timeout = 10000
    /**
     * get 请求数据进行修改  默认以对象形式传参
     */
    function getDataConfig (data = {}) {
      if (typeof data !== 'object') return data
      const arr = []
      for (let key in data) {
        let res = `${key}=${data[key]}`
        arr.push(res)
      }
      const str = arr.join('&')
      return str
    }
    axios.interceptors.request.use(config => {
      return config
    }, error => {
      return Promise.reject(error)
    })
    
    axios.interceptors.response.use(response => {
      return response.data
    }, error => {
      return Promise.reject(error)
    })
    const fetch = {
      post (url, request, code = 1000) {
        let loadingInstance = Loading.service({'background': 'rgba(0, 0, 0, .6)'})
        return new Promise((resolve, reject) => {
          axios({
            method: 'post',
            url,
            data: request
          }).then(response => {
            loadingInstance.close()
            const res = response.data
            if (res && response.code === code) {
              resolve(response)
            }
            reject(response)
          }).catch(error => {
            loadingInstance.close()
            reject(error)
          })
        })
      },
      get (url, request, code = 1000) {
        let loadingInstance = Loading.service({'background': 'rgba(0, 0, 0, .6)'})
        const data = getDataConfig(request)
        return new Promise((resolve, reject) => {
          axios({
            method: 'get',
            url: url + '?' + data
          }).then(response => {
            loadingInstance.close()
            const res = response.data
            if (res && response.code === code) {
              resolve(response)
            }
            reject(res)
          }).catch(error => {
            loadingInstance.close()
            reject(error)
          })
        })
      }
    }
    export default fetch
    

    特别是现在需求实时变化,若是这样一成不变,很受被动

    • 当后台不返回想要的参数时,就会因为封装不灵活,直接报错 因为data这个属性都没有
    • 在使用loading时,要设计灵活,在有些请求地方,loading是另外一种展现形式,有时页面请求,根本不需要都显示loading,只是区域性显示,而这封装的便会影响体验
    使用vuex时的注意问题

    在使用vuex时,老是发现,当前并没有值,确总是存在上一次保留的值,之前一直很莫名其妙,不得已在看Vue.js devtools中查看时,发现上次请求的数据依旧存在,导致下次请求数据时,直接拿里面的值了,这就是为何一进页面就有值(没有进行数据请求时),思来想去这个情况会经常存在,考虑若是其他页面不共用,同时数据也不许额外进行保留时,可以在组件进行销毁时destroyed时,再将值初始化即可,这样可以避免很多不必要的坑

  • 相关阅读:
    算法生成卐和卍字图
    分形之可编辑折线
    算法生成太极八卦图
    通过算法生成一幅太极图
    使用异或运算对数据及文件进行加密处理,附软件及源码
    C语言中将0到1000的浮点数用强制指针类型转换的方式生成一幅图像
    算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]
    【python基础学习】基础重点难点知识汇总
    【深入学习linux】在linux系统下怎么编写c语言程序并运行
    【深入学习linux】CentOS 7 最小化安装后程序必须安装的组件
  • 原文地址:https://www.cnblogs.com/sinosaurus/p/9790826.html
Copyright © 2011-2022 走看看