vue开发小技巧
这里分享几个我使用到的vue开发小技巧
一、状态共享
使用Vue进行开发时,随着项目的复杂化,组件个数也逐渐增加,此时我们就面临着一个问题——多组件状态共享。当然有人会说使用Vuex来解决啊,但是如果此时我们的项目没有那么大那么复杂,在使用Vuex会导致繁琐冗余
那该怎么办?其实我们还可以通过vue.js2.6版本新增的Observable API来解决这个问题。
示例
a) 创建一个 store.js,包含一个store和一个mutations,分别用来指向数据和处理方法。
import Vue fomr 'vue'
export const Vue.observable( obj: {count: 0 })
export const mutations = {
steCount(count){
store.count = count
}
}
b) 在 App.vue里面引入这个 store.js,使用引入的数据和方法。
<template>
<div id="app">
<p>count:{{count}}</p>
<div @click="steCount(count+1)">+1</div>
<div @click="steCount(count-1)">-1</div>
</div>
<template>
<script>
import { store, mutations } from '/store/store';
export default {
name: "App",
computed: {
count(){
return store.count;
}
},
methods:{
steCount:mutations.setCount
}
}
<script>
二、长列表性能优化
Vue会通过劫持我们的数据,进而实现视图响应数据的变化。但有时候我们的数据不需要发生变化,只是纯粹的数据展示,此时Vue再进行数据劫持会大大增加组件初始化时间。此时我们可以使用object.freeze方法来阻止vue劫持数据,进而减少组件初始化时间。
示例
export default {
data() {
users:{}
},
async created(){
const users = await axios.get("/api/users");
this.users = Object.freeze(users)
},
methods: {
// 改变值不会触发视图响应
this.data.urses[0] = nweValue
// 改变引用依然回触发视图响应
this.data.users = newArray
}
}
三、作用域插槽
所谓的作用域插槽,就是父组件在调用子组件时给子组件传输一个插槽,且该插槽必须放在template标签里边,同时声明从子组件接收的数据放在一个自定义属性内,并定义该数据的渲染方式。
那作用域插槽有什么用处呢?
比如项目中有一个A组件只负责布局不管数据逻辑,另一个B组件负责数据处理,A组件需要数据的时候就去B组件中取。那当开发过程中我们的布局发生变化时,我们只需要修改A组件即可,而不需要修改B组件,这样就能充分复用B组件的数据逻辑处理。
示例
a) 创建一个user.vue组件,将user数据绑定在元素上
<span>
<slot v-bind:user="user">
{{ user.lastName}}
</slot>
</span>
b) 在父组件中引用 user组件,展示user数据的firstName数据,此时给 v-slot带一个值来定义我们提供的插槽 prop 的名字:
<v-user v-slot:default="slotProps">
{{slotProps.user.firstName}}
</v-user>
四、web worker
JS 是单线程的, 那么到底能不能同时做两个事情呢,利用web worker是可以的
web worker 就给我提供了一个多线程环境
可以在主线程环境下, 开启一个 worker 环境线程我们可以将一些比较费时间的任务交给 worker 线程来做
我们的主线程还是继续做主线程的事情
这样, 就可以达到两个事情同时开始
通常, 我们都会在 worker 线程里面进行一些计算量比较大的任务
在主线程里面进行页面交互行为, 这样不会被阻塞或者拖慢
示例
console.time('test for')
console.time('test timeout')
for (var i = 0; i < 1000000000; i++) { }
console.timeEnd('test for')
setTimeout(() => {
console.log('定时器')
console.timeEnd('test timeout')
},2000)
利用 poseMessage 和 onMessage 来实现在 worker.js 里面发出结果
// worker.js
console.time('test for') var sum = 0
for (var i = 0; i < 1000000000; i++) {
sum += i
} postMessage(sum) console.timeEnd('test for')
在主线程接受结果
<script>
console.time('test timeout')
var w = new Worker('./worker.js') w.onmessage = function (e) {
console.log(e.data)
} setTimeout(() => {
console.log('定时器')
console.timeEnd('test timeout')
}, 2000)
</script>
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

vue开发小技巧的更多相关文章
- Windows统一平台: 开发小技巧
Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...
- flex开发小技巧集锦
关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...
- TP开发小技巧
TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...
- 移动Web开发小技巧
移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用 ...
- BizTalk开发小技巧
BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...
- Java开发小技巧(三):Maven多工程依赖项目
前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...
- iOS开发小技巧 - UILabel添加中划线
iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- PHP开发小技巧③—实现多维数组转化为一维数组
在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...
- PHP开发小技巧①①—php实现手机号码显示部分
从个人信息保护性的角度来讲,我们在开发过程中总会想办法去保护用户的一些个人信息.就如本篇博文所讲,我们有时会将用户的手机号码只显示出部分,这是很多网站都有做的功能.这个功能实现起来也是特别的简单,只需 ...
随机推荐
- 从零开始的react入门教程(六),一篇文章理解react组件生命周期
壹 ❀ 引 学习任何一门框架,无论是vue.react亦或是angular,我们除了需要熟练掌握框架语法外,了解框架自身的生命周期也是至关重要的.一方面生命周期在面试中多多少少总是会提及,其次了解框架 ...
- Goland 使用[临时]
环境变量 因为module模式的引入, 多个项目可以共用同一套External Libraries, 在File->Settings->Go中, 设置GOROOT为go安装目录, 例如 / ...
- 两台redhat7虚拟机配置ssh免密访问
说明 有时候为了方便搭建各种集群环境,需要配置多台虚拟机之间可以互相免密码访问.本文就介绍一下这个知识点,希望所帮助的朋友给老徐点个赞:) 两台虚拟机环境配置如下: 虚拟机1:192.168.56.1 ...
- OCP试题解析之053-61 RMAN set command id to
61.You frequently have multiple RMAN sessions running, and you want to be able to easily identify ea ...
- WinRT: 可能是 Windows 上最好用的 Native ABI 和远程调用方案
前言 Windows 自从很久以来就有一个叫做 COM 的 Native ABI.这是一套面向对象的 ABI,在此之上 Windows 基于 COM ABI 暴露了各种各样的 API,例如 Manag ...
- letcode-K个一组翻转链表(栈思想 + 递归)
题目:输入一个有序链表,每K个一组进行反转. 输入:1, 2, 3, 4, 5, 5, 6, 8, 10 K = 3 输出:3, 2, 1, 5, 5, 4, 10, 8, 6 题解 反转,那么最先想 ...
- Web流式下载数据时展示提示信息
以Web方式下载数据有多种场景: 1.服务端本身已经存在文件,此时只需要一个文件访问地址即可下载,比如:将文件URL设置为<a>标签的href属性即可,点击<a>标签就能立即触 ...
- OpenCV开发笔记(六十六):红胖子8分钟带你总结形态学操作-膨胀、腐蚀、开运算、闭运算、梯度、顶帽、黑帽(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- MongoDB的安装及启动
下载地址 https://www.mongodb.com/try/download/community 安装步骤 自定义安装目录 配置环境 下面是你安装后的mongodb的目录 在电脑的环境变量Pat ...
- 第122篇: JS函数一些基本概念
好家伙,本篇为<JS高级程序设计>第十章"函数"学习笔记 1.函数的三种定义方式:函数表达式.函数声明及箭头函数 函数声明: function sum(a) { ret ...