记录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时,再将值初始化即可,这样可以避免很多不必要的坑
记录vue中一些有意思的坑的更多相关文章
- [记录] Vue中的dom操作
使用过Vue的同学都应该有这样一个感觉,在vue中页面是基于数据驱动的,不需要我们自己操作dom,框架帮我们完成了这一步,事实上Vue官方也建议我们这样做 在绝大多数情况下是不需要操作dom就可以完成 ...
- vue中的小踩坑(01)
前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程: 1.不知道大家有没有注意到 ...
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- 新人 记录VUE中分页实现
关于函数传值 this.getPurchaseHistoryData(index, num,timeType);第一位是显示的页数,第二是控制首页4上一页-1下一页是2末页是5 第三是是对昨天是1,今 ...
- 记录vue springboot 跨域采坑
vue配置 域名src\main.js要与config\index.js一样 var axios = require('axios')axios.defaults.baseURL = 'http:// ...
- Vue 中 watch 的一个坑
开发所用 Vue 版本 2.6.11 子组件 coma 中两个属性: props: { url: { type: String, default: '' }, oriurl:{ type: Strin ...
- vue中书写JSX一些坑-特殊属性名
举例说明, T1和T2引用Sub时, key2会出现在props以及data.attrs中, 而key则在data中 const Sub = ({data, props}) => { conso ...
- vue 中 命名视图的用法
今天主要记录 vue中命名视图的用法 先奉上官网网址:https://router.vuejs.org/zh/guide/essentials/named-views.html 一般情况下,一个页面 ...
- Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理
基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...
随机推荐
- 【Python】读取各种文档(txt、csv、excel、pdf)方法
1.读取txt文件 注意事项: 1..txt文件同下方脚本所在的.py文件需要在同一个文件夹下 # coding=utf-8 txt读取 with open("1233.txt") ...
- OpenS-CAD学习(1)
1.OpenS-CAD是一个不错的小巧的开源程序,以图层方式组织图形,可以绘制基本的线段.弧段.圆,可以进行节点对象捕捉,可以选择几何对象.对图幅进行平移.放大.缩小.可以将结果序列化保存为xml格式 ...
- mydumper安装
安装依赖包: yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake 下载二进制包: wget ht ...
- Jmeter之Constant Timer与constant throughput timer的区别
当放置Constant Timer于两个http请求之间,那么它代表的含义是:在上一个请求发出至完成后, 开始Contant Timer指定的时间,最后再发出第二个请求.它并不是代表两个请求之间的发送 ...
- 001-java虚拟机的概念
https://blog.csdn.net/yfqnihao/article/details/8289363 1.什么是java虚拟机.(你以为你知道,如果你看我下面的例子,你会发现你其实不知道) ( ...
- ng-深度学习-课程笔记-11: 卷积神经网络(Week1)
1 边缘检测( edage detection ) 下图是垂直边缘检测的例子,实际上就是用一个卷积核进行卷积的过程. 这个例子告诉我们,卷积可以完成垂直方向的边缘检测.同理卷积也可以完成水平方向的边缘 ...
- python uwsgi报错epoll_ctl(): Bad file descriptor
今天安装了uwsgi+supervisord+nginx,一直访问不了 直接启动uwsgi使用nginx访问,查看有大量报错:epoll_ctl(): Bad file descriptor [cor ...
- [one day one question] 有没有免费接收短信验证用于注册的软件或者平台?
问题描述: 想要批量注册撸羊毛,有手机短信验证码验证,这怎么破? 解决方案: 免费的肯定没有的,不过"一条短信收费一毛钱"倒是有一个,本人是亲自试用过,该平台收不到短信验证码不收费 ...
- Web安全之BurpSuite抓取HTTPS请求
出现了问题,第一步要干什么呢? 当然是要去官方网站去找FAQ和help,先来练习一下英语 https://portswigger.net/burp/help/proxy_options_install ...
- 20145325张梓靖 《Java程序设计》第7周学习总结
20145325张梓靖 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治时间,简称GMT时间,由观察太阳而得来:世界时,UT:国际原子时,TAI:世界协调时间,U ...
