VueJS使用总结
根据平时开发工作,对vue的部分知识点做一个小总结。
对比ReactJS vs. VueJS
ReactJS
ReactJS本身不是一个框架,而是表示层,包含模板语言和一些用于处理HTML的函数。生成的代码是一个HTML文档,包含用于存储内部存储器状态的HTML/JavaScript连接器组件。
ReactJS在开发中非常有用,但是仅仅使用React构建完整的应用程序是非常困难的。
对于大部分开发人员来说,最重要最有价值的React功能是构建大型Web附加组件的可能性,这些组件不需要重新加载页面就可以进行更新。ReactJS主要目标是应用程序中的用户界面处理。
ReactJS优点
- React在浏览器中呈现DOM,并实时对其进行可视化更新。
- React拥有一个独立的产品React Native,可以开发跨平台应用。大部分代码都是使用React编写的,并且必要时可以快速的添加特定平台的包。
ReactJS缺点
- 缺乏完整的框架功能(没有内置的状态管理系统,没有内置的数据库查询工具等)
- 文档和手册对新手开发者来说太复杂了
总结
总的来说,ReactJS是一款非常好的工具,配备了许多对于开发高质量应用程序界面至关重要的功能。主要优点是即时显示状态变更,以及与React相关的元素的高渲染速度和熟练地操作。缺点就是ReactJS定位为表现层。
React本身虽然不是一个完整的框架,但是可以借助Redux协助。Redux是一个可预测的JavaScript应用程序状态管理器。通过引入简单和可预测的状态模型,强调函数式编程,不变数据和紧凑API来解决许多不同的问题。
因为React广受欢迎,拥有了广泛兼容插件、库、框架的生态系统。
VueJS
不是完全意义上的框架,是MVVM模板层。
VueJS优点
- 易于开发。
- 双向数据绑定。大大简化并加速了HTML块的处理。
- 控制状态的能力。允许实时监控界面的开发。通过props()和data()来执行。
- 遵循人的思维过程。而不是面向机器的思维方式。
VueJS缺点
- 社区不够活跃
- 组件必须预先定义,不能通过prop传递动态结构。
总结
强大快速简单。容易上手。
对比React与Vue
在数据变更时,React重写浏览器DOM的整个结构,而Vue直接更新单个节点,使其与其他的DOM操作工具(如JQuery)更加兼容。所以,相对来说,React不那么灵活,在执行效率也会低一些。
- 性能:VueJS更有优势。Vue有用处理更高帧速率的能力-每秒10帧,而React的典型速度是每秒1帧。
- 可伸缩性:Vue使用template模板语法,React使用JavaScript编写DOM(jsx扩展)。如果项目比较复杂,Vue模板语法很难重用,React则更好一些。
- 学习曲线:Vue模板简单易懂。React需要学习JSX(JavaScript语法的扩展),不够直观。
Object.defineProperty
Object.defineProperty()可以直接在一个对象上定义一个新属性,或者修改一个存在的属性,并返回这个对象。
如:
let Woman = Object.defineProperty({},'name',{
value:'Nini'
});
console.log(Woman.name);//Nini
// 以上相当于
// (1)
Woman.name = 'Nini';
// (2)
Woman['name'] = 'Nini';
基本语法:
Object.defineProperty(obj,prop,descriptor);
obj- 需要定义属性的对象
prop- 需要定义或修改的属性名
descriptor- 将被定义或修改的属性的值
基本概念
数据驱动
在Vue.js中,DOM的状态是数据状态的反映,通过创建“ViewModel”对象将DOM和数据连接起来。更改数据时,DOM会自动更新。
组件
页面可能庞大而且复杂,希望可以将其分离成多个小的单元,以便理解和维护。在Vue.js中,通过组件实现这点。
虚拟DOM渲染过程
Virtual DOM是一个表示文档对象模型(DOM)的JavaScript对象。虚拟DOM最大限度的降低了真实DOM的更新成本。

VueJS生命周期
通过一个简单的Vue实例理解生命周期的钩子:
<div id="app">
<h1></h1>
</div>
var vm = new Vue({
el: '#app',
data: {
message: 'Hello World!'
},
beforeCreate: function() {
console.log("beforeCreate");
},
created: function() {
console.log("created");
},
beforeMount: function() {
console.log("beforeMount");
},
mounted: function() {
console.log("mounted");
},
beforeUpdate: function() {
console.log("beforeUpdate");
},
updated: function() {
console.log("updated");
},
beforeDestroy: function() {
console.log("beforeDestroy");
},
destroyed: function() {
console.log("destroyed");
}
});
如图:

VueJs组件
将复杂的页面拆分成多个小单元,再将组件组装在一起。
全局注册组件
Vue.component(tagName, options);
例如:
...
<body>
<div id="app">
<greeting></greeting>
</div>
<script>
Vue.component('greeting', {
template: '<h1>Welcome to here!</h1>'
});
// 创建实例
var vm = new Vue({
el: '#app'
});
</script>
</body>
...

使用创建更复杂的组件
例如:
...
<body>
<div id="app">
<greeting :title="title" :login="login" :reg="reg"></greeting>
</div>
<template id="greeting-template">
<h1></h1>
<button></button>
<button></button>
</template>
<script>
Vue.component('greeting', {
template: '#greeting-template',
props:['title','login','reg']
});
// 创建实例
var vm = new Vue({
el: '#app',
data:{
title:'Welcome to here!',
login:'登录',
reg:'注册'
}
});
</script>
</body>
...

局部注册
如果组件不需要共用,可以使用局部注册。
var Prompt = {
template: `<div><p>${ message }</p><button @click="sayHi">Say Hi!</button></div>`,
data: function () {
return {
message: 'Hello World!'
}
},
methods: {
sayHi: function() {
alert('Hi');
}
}
};
var vm = new Vue({
el: '#app',
components: {
'prompt-component': Prompt
}
});
…End!