记录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时,再将值初始化即可,这样可以避免很多不必要的坑

记录vue中一些有意思的坑的更多相关文章

  1. [记录] Vue中的dom操作

    使用过Vue的同学都应该有这样一个感觉,在vue中页面是基于数据驱动的,不需要我们自己操作dom,框架帮我们完成了这一步,事实上Vue官方也建议我们这样做 在绝大多数情况下是不需要操作dom就可以完成 ...

  2. vue中的小踩坑(01)

    前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程:         1.不知道大家有没有注意到 ...

  3. 在Vue中遇到的各种坑 及性能提升

    Vue: (1)    没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...

  4. 新人 记录VUE中分页实现

    关于函数传值 this.getPurchaseHistoryData(index, num,timeType);第一位是显示的页数,第二是控制首页4上一页-1下一页是2末页是5 第三是是对昨天是1,今 ...

  5. 记录vue springboot 跨域采坑

    vue配置 域名src\main.js要与config\index.js一样 var axios = require('axios')axios.defaults.baseURL = 'http:// ...

  6. Vue 中 watch 的一个坑

    开发所用 Vue 版本 2.6.11 子组件 coma 中两个属性: props: { url: { type: String, default: '' }, oriurl:{ type: Strin ...

  7. vue中书写JSX一些坑-特殊属性名

    举例说明, T1和T2引用Sub时, key2会出现在props以及data.attrs中, 而key则在data中 const Sub = ({data, props}) => { conso ...

  8. vue 中 命名视图的用法

    今天主要记录  vue中命名视图的用法 先奉上官网网址:https://router.vuejs.org/zh/guide/essentials/named-views.html 一般情况下,一个页面 ...

  9. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

随机推荐

  1. Elasticsearch之settings和mappings(图文详解)

    Elasticsearch之settings和mappings的意义 简单的说,就是 settings是修改分片和副本数的. mappings是修改字段和类型的. 记住,可以用url方式来操作它们,也 ...

  2. talib 中文文档(十二):Pattern Recognition Functions K线模式识别,形态识别

    Pattern Recognition Functions K线模式识别,形态识别 CDL2CROWS - Two Crows 函数名:CDL2CROWS 名称:Two Crows 两只乌鸦 简介:三 ...

  3. Python开发【Django】:CMDB基础

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

  4. 使用celery之了解celery(转)

    原文  http://www.dongwm.com/archives/shi-yong-celeryzhi-liao-jie-celery/   前言 我想很多做开发和运维的都会涉及一件事:cront ...

  5. Linux下tomcat启动项目原因排查

    先停掉tomcat服务器: 然后把文件删除: 这时候启动服务器: 看下有没有启动成功: 接着把重新优化过的代码用X ftp传上去. 等几分钟就可以. 如果老是出现问题,就去catalina.out文件 ...

  6. Keras-在预训练好网络模型上进行fine-tune

    在深度学习的学习过程中,可能会用到一些已经训练好的模型,比如Alex Net,google Net,VGG,Resnet等,那我们怎样对这些训练好的模型进行fine-tune来提高准确率呢? 参考文章 ...

  7. java-mybaits-00701-与spring整合

    1.1     整合思路   需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSes ...

  8. ZOHO 免费小型企业邮箱和个人邮箱

    Zoho Mail 提供免费小型企业邮箱注册.精简版只能添加一个域到您的机构帐号,最多允许10用户.如果您想添加多个域,您可以升级到标准版.10用户免费,5 GB /每用户,5 GB (共享). 除了 ...

  9. c/c++值传递和引用传递

    今天看数据结构的时候,因为是c语言版的,刚开始学的时候就对指针搞的焦头烂额,今天,发现参数传递的时候,&符号也莫名其妙,搜了一篇好文,转载下来. 一. 函数参数传递机制的基本理论 函数参数传递 ...

  10. appscan 9.0.3.10 版本下载

    http://download4.boulder.ibm.com/sar/CMA/RAA/07ukf/0/ 其他版本下载 https://www.cnblogs.com/hua198/p/100447 ...