本文目录一览:
关于Vue.js 和 react.js 的异同
react.js和vue.js的异同:
vue---react.js 的相同点:
vue和react是两个不像相同的框架,但是他们之间也是用共同特点的,所有的前端框架都有一些相同的特点,vue和react之间最关键的相同之处在于,它们在被设计出来时所用的思想或者说理念是一样的,比如说都用到了component组件,props参数传递,组件之间的通信,state状态管理器,lifecircle声明周期等等,似乎现在的前端框架都已经成为了mvc或则mvvc的样子,虽然还有一部分前端开发还是传统模式,但是必然会被node+webpack+vue /react---之类的自动化逐渐替代...
vue----react.js 的不同之处:
vue和react.js最大的不同之处在于它们对DOM的渲染方式不同,vue可以直接在vue文件中使用html标签,数据绑定时类似angular,可以进行条件渲染,而react.js则采用了jsx语法,运用虚拟DOM 的概念进行DOM对页面元素进行渲染,获取页面元素需要用ref来获取,似乎更加安全。
Vue.JS入门篇--列表渲染
查看一下效果,应该很容易得到结果
有时我们可能需要重复一个包含多个节点的块,这时可以用 template 标签包裹这个块。这里的 template 标签只起到语义上的包裹作用,其本身不会被渲染出来。例如:
简单值 (primitive value) 即字符串、数字、boolean 等并非对象的值。对于包含简单值的数组,你可用 $value 直接访问值:
有时我们可能想要更明确地访问当前作用域的变量而不是隐式地回退到父作用域。你可以通过提供一个参数给 v-repeat 指令并用它作为将被迭代项的别名:
Vue.js 内部对被观察数组的变异方法 (mutating methods,包括 push(), pop(), shift(), unshift(), splice(), sort() 和 reverse()) 进行了拦截,因此调用这些方法也将自动触发视图更新。
下面是一个演示的例子,点击按钮的时候数据项会被移除
Vue.js 给被观察数组添加了两个便捷方法:$set() 和 $remove() 。
你应该避免直接通过索引来设置数据绑定数组中的元素,比如 demo.items[0] = {},因为这些改动是无法被 Vue.js 侦测到的。你应该使用扩展的 $set() 方法:
$remove() 只是 splice()方法的语法糖。它将移除给定索引处的元素。当参数不是数值时,$remove() 将在数组中搜索该值并删除第一个发现的对应元素。
当你使用非变异方法,比如filter(), concat() 或 slice(),返回的数组将是一个不同的实例。在此情况下,你可以用新数组替换旧的数组:
你可能会认为这将导致整个列表的 DOM 被销毁并重新渲染。但别担心,Vue.js 能够识别一个数组元素是否已有关联的 Vue 实例, 并尽可能地进行有效复用。
在某些情况下,你可能需要以全新的对象(比如 API 调用所返回的对象)去替换数组。如果你的每一个数据对象都有一个唯一的 id 属性,那么你可以使用 track-by 特性参数给 Vue.js 一个提示,这样它就可以复用已有的具有相同 id 的 Vue 实例和 DOM 节点。
例如:你的数据是这个样子的
那么你可以像这样给出提示:
在替换 items 数组时,Vue.js 如果碰到一个有 _uid: '88f869d' 的新对象,它就会知道可以直接复用有同样 _uid 的已有实例。 在使用全新数据重新渲染大型 v-repeat 列表时,合理使用 track-by 能极大地提升性能。
你也可以使用 v-repeat 遍历一个对象的所有属性。每个重复的实例会有一个特殊的属性 $key。对于简单值,你也可以象访问数组中的简单值那样使用 $value 属性。
在 ECMAScript 5 中,对于给对象添加一个新属性,或是从对象中删除一个属性时,没有机制可以检测到这两种情况。针对这个问题,Vue.js 中的被观察对象会被添加三个扩展方法: $add(key, value), $set(key, value) 和 $delete(key)。这些方法可以被用于在添加 / 删除观察对象的属性时触发对应的视图更新。方法 $add 和 $set 的不同之处在于当指定的键已经在对象中存在时 $add 将提前返回,所以调用 obj.$add(key) 并不会以 undefined 覆盖已有的值。
v-repeat 也可以接受一个整数。在这种情况下,它将重复显示一个模板多次。 下面的例子将迭代3次。
有时候我们只需要显示一个数组的过滤或排序过的版本,而不需要实际改变或重置原始数据。Vue 提供了两个内置的过滤器来简化此类需求: filterBy 和 orderBy。
Vue.js入门教程(三)双向绑定和数据渲染
既然清楚了原理,那么,接下来进入正题——我知道了vue怎么安装,那么我怎么使用呢?
在告诉你基础用法之前,我还是要先告诉你一个情况。
可能要令你有点失望。vue主要是侧重于数据端的。他的目的就是渲染数据和在前端调整一下数据逻辑。
他不是像jquery那样让你用来做特技的。就算你要做特技。你也应该通过css3/canvas而不是dom。
所谓的双向绑定,你可以理解就是把view。(你还不清楚mvc的话,请看第一章)
和model绑定到一起。说白了,就是你js中的绑定值变了。你dom中的内容就跟着一块变了。
vue是通过解析{{文字..}}来生成内容的。后面绑定方法,输出内容的时候都会讲到。
列表输出使用 v-for,这些v开头加横杠的叫做命令
这些命令是可以自定义的。但是那都属于高级操作,我们不用它也完全足够支撑做一个大型项目了。
其实你回发现,这里无论是v-for或者是v-什么其他玩意
它都深刻的遵循了es6的语法。这里不就是一个典型的for in 循环吗。不过我们现在都用for of了。
你记住这个用法,它就长这样。
前后端分离开发的关键在于:后台只提供接口。
我们获得的数据多数情况下,仅仅是一个json,而mvvm的关键就再于解析数据在前端完成了。如果你了解jsp或者php你会了解,数据的解析在mvc中,
是由后端完成的,而html只负责显示。
所以,当你了解了数据绑定和渲染以后,你可以第一时间先把数据输出到页面了。
我们前端最厉害的地方不就是处理能看得见的东西吗?
Vue中使用Cytoscape.js
在Vue中使用一些第三方库时,很容易犯的错误是直接把第三方库的对象放在Vue的data属性中。
例如在使用 Cytoscape.js 时,用下面这种声明方式。
这样做的确是方便后面的操作,但问题是,这种对象特别大,嵌套层级很深,如下图所示,如果直接放在data里,vue的响应式机制,会监听cy的每个属性,开销巨大,CPU占用瞬间到100%。
所以在使用 Cytoscape.js 、 Echarts.js 与vue结合时,要避免直接放在data属性中。一种方法是,在 mounted() 里引入该对象。
另一种方法是用 Object.freeze()
这两个方法,都能避免vue的响应式开销,后面也能够正常操作 this.cy 对象。