setCount(count) {
store.count = count;
}
};
复制代码
然后在App.vue里面引入这个store.js,在组件里面使用引入的数据和方法
2.长列表性能优化
我们应该都知道vue会通过object.defineProperty对数据进行劫持,来实现视图响应数据的变化,然而有些时候我们的组件就是纯粹的数据展示,不会有任何改变,我们就不需要vue来劫持我们的数据,在大量数据展示的情况下,这能够很明显的减少组件初始化的时间,那如何禁止vue劫持我们的数据呢?可以通过object.freeze方法来冻结一个对象,一旦被冻结的对象就再也不能被修改了
export default {
data: () => ({
users: {}
}),
async created() {
const users = await axios.get(“/api/users”);
this.users = Object.freeze(users);
}
};
复制代码
另外需要说明的是,这里只是冻结了users的值,引用不会被冻结,当我们需要reactive数据的时候,我们可以重新给users赋值。
export default {
data: () => ({
users: {}
}),
async created() {
const users = await axios.get(“/api/users”);
this.users = Object.freeze(users);
},
methods:{
// 改变值不会触发视图响应this.data.users[0] = newValue
// 改变引用依然会触发视图响应this.data.users = newArray
}
};
复制代码
3.去除多余的样式
随着项目越来越大,书写的不注意,不自然的就会产生一些多余的css,小项目还好,一旦项目大了以后,多余的css会越来越多,导致包越来越大,从而影响项目运行性能,所以有必要在正式环境去除掉这些多余的css,这里推荐一个库purgecss,支持CLI、JavascriptApi、Webpack等多种方式使用,通过这个库,我们可以很容易的去除掉多余的css。
Hello Vanilla!
We use Parcel to bundle this sandbox, you can find more info about Parcel
<ahref=“https://parceljs.org"target=”_blank"rel=“noopener noreferrer”>here.
body {
font-family: sans-serif;
}
a {
color: red;
}
ul {
li {
list-style: none;
}
}
import Purgecss from"purgecss";
const purgecss = new Purgecss({
content: [“**/*.html”],
css: [“**/*.css”]
});
const purgecssResult = purgecss.purge();
复制代码
最终产生的purgecssResult结果如下,就可以看到多余的a和ul标签的样式都没了
4.函数式组件
函数式组件,即无状态,无法实例化,内部没有任何生命周期处理方法,非常轻量,因而渲染性能高,特别适合用来只依赖外部数据传递而变化的组件。
写法如下:
在template标签里面标明functional 只接受props值 不需要script标签
<List:items=“[‘Wonderwoman’, ‘Ironman’]” :item-click=“item => (clicked = item)”
/>
Clicked hero: {{ clicked }}
{{ item }}
复制代码
5.监听组件的生命周期
比如有父组件Parent和子组件Child,如果父组件监听到子组件挂载mounted就做一些逻辑处理,常规的写法可能如下:
最后
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。