记录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 ...
随机推荐
- Oracle管理监控之监控表空间使用率脚本
SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", BLOCKS SUM_BLOCKS, SPACE ...
- Drainage Ditches---hdu1532(最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题意: 每次下雨的时候,农场主John的农场里就会形成一个池塘,这样就会淹没其中一小块土地,在这 ...
- 小米范工具系列之六:小米范 web查找器2.x版本发布
小米范web查找器是一款快速识别端口及服务的小工具. 此工具使用java 1.8以上版本运行. 下载地址:http://pan.baidu.com/s/1c1NDSVe 文件名web finder ...
- 省市县三级联动的SQL
完整版见https://jadyer.github.io/ 首先是建表语句 CREATE TABLE `t_address_province` ( `id` INT AUTO_INCREMENT PR ...
- Django Rest Framework(2)-----序列化详解(serializers)
REST framework中的序列化类与Django的Form和ModelForm类非常相似.我们提供了一个Serializer类,它提供了一种强大的通用方法来控制响应的输出,以及一个ModelSe ...
- wcf 远程服务器返回了意外响应: (413) Request Entity Too Large。
我遇到这个问题的原因是:我使用asp.net 网站调用wcf服务后,通过方法提交数据产生的.我提交的数据是一个实体,包含很多字符串和图片格式的二进制数据超过4M 就报个错误. 后来同事帮忙解决了.他说 ...
- Winform开发之ComboBox和ComboBoxEdit控件绑定key/value数据
使用 ComboBox 控件绑定key/value值: 因为 ComboBox 是有 DataSource 属性的,所以它可以直接绑定数据源,如 DataTable.ListItem 等. 使用 Da ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON MoveRectangle2
zw版[转发·台湾nvp系列Delphi例程]HALCON MoveRectangle2 procedure TForm1.Button1Click(Sender: TObject);var img ...
- Java Exception 和Error有什么区别?
① Exception 和Error 都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型. ② Exception和Error ...
- 【运维技术】Jenkins配置使用教程
Jenkins配置使用教程 单机jenkins启动 软件安装和启动,必须含有java环境 # 安装jdk,参考其他教程,创建文件目录 mkdir -p /app/jenkins cd /app/jen ...
