这里分享几个我使用到的vue开发小技巧

更新日期: 2022-02-09 阅读: 1.2k 标签: 技巧

一、状态共享

使用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>
来源:https://www.cnblogs.com/smileZAZ/archive/2022/02/09/15875180.html


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/11107

相关推荐

20个让你效率更高的CSS代码技巧

在本文中,我们想与您分享一个由各大CSS网站总结推荐的20个有用的规则和实践经验集合。有一些是面向CSS初学者的,有一些知识点是进阶型的。希望每个人通过这篇文章都能学到对自己有用的知识

微信小程序分享到朋友圈方法与技巧

小程序提供onShareAppMessage 函数,此函数只支持分享给我微信朋友,小程序如何分享到朋友圈呢?使用canvas绘制一张图片,并用wx.previewImage预览图片,然后长按图片保存图片到手机。

小技巧:检查你本地及公共 IP 地址

本地的 IP 地址是分配给你计算机上的内部硬件或虚拟网卡的本地/私有 IP 地址。根据你的 LAN 配置,上述 IP 地址可能是静态或动态的。公共的 IP 地址是你的 Internet 服务提供商(ISP)为你分配的公共/外部 IP 地址。

前端新手程序员不知道的 20个小技巧

前端新手程序员不知道的 20个小技巧:作为前端开发者,使用双显示器能大幅提高开发效率、学编程最好的语言不是PHP,是English、东西交付之前偷偷测试一遍、问别人之前最好先自己百度,google一下、把觉得不靠谱的需求放到最后做,很可能到时候需求就变了...

12 个 CSS 高级技巧汇总

使用 :not() 在菜单上应用/取消应用边框;给body添加行高;所有一切都垂直居中;逗号分隔的列表;使用负的 nth-child 选择项目;对图标使用SVG;优化显示文本;对纯CSS滑块使用 max-height;继承 box-sizing

探讨Js奇技淫巧

Js 是一门灵活的语言(手动滑稽)。应该多学习一些奇技淫巧,因为很多奇技淫巧往往代表一些混合的知识,往往会有一些新奇的思考与体验(怎么我想不出来?)

提高网站加载速度的一些小技巧

为你网站的用户留下良好的第一印象是非常必要的。随着商业领域的竞争,拥有一个吸引人的网站可以帮助你脱颖而出。研究表明,如果加载时间超过3秒,会有 40% 的用户放弃访问你的网站

去除桌面快捷方式上的小箭头

电脑桌面上默认快捷方式左下角是有个小箭头的。很多用户可能不习惯快捷方式小箭头。那怎么去掉呢?新建一个TXT文档(文档的名称自己顺便命名即可),然后把下面的这些英文全部复制到TXT文档内保存。把TXT文档的扩展名改成 .bat

微信小程序技巧_你需要知道的小程序开发技巧

一直以来进行了比较多的微信小程序开发... 总会接触到一些和官方组件或 api 相关或其无法解决的需求,于是决定在这里小小的整理一下微信小程序开发的一些技巧

JS 中有趣的事实

使用 JS 有很多有趣的地方。尽管工程师们每天都在与之打交道,但仍有一些语言没有被开发出来。本广将介绍一些你可能想不到的JS特性。NaN 是一个 number 类型

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!