react 和vue

相同之处:

1、使用 Virtual DOM
2、提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件
3、将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库

不同之处:

在 React 应用中,当某个组件的状态发生变化时,它会以该组件为根,重新渲染整个组件子树。在 Vue 应用中,组件的依赖是在渲染过程中自动追踪的,所以系统能精确知晓哪个组件确实需要被重渲染。

react 是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。 改变state 之后重新渲染走完渲染流程,所以一个组件更新,下面的子组件都会更新。react的性能优化需要手动去做,而vue的性能优化是自动的。 一般使用shouldComponentUpdate 优化,或者PureComponent(PureComponent就是重写了shouldComponentUpdate

模板和 JSX:

1、React与Vue最大的不同是模板的编写。
Vue鼓励你去写近似常规HTML的模板。写起来很接近标准HTML元素,只是多了一些属性。

<ul>
    <template v-for="item in items">
        <li>{{ item.msg }}</li>
        <li class="divider"></li>
    </template>
</ul>

React推荐你所有的模板通用JavaScript的语法扩展——JSX书写.但使用JavaScript而不是模板来开发,赋予了开发者许多编程能力。

<ul className="pasta-list">
    {
        Object.keys(this.state.pastadishes).map(key =>
            <PastaItem index={key} key={key} details={this.state.pastadishes[key]} addToOrder={this.addToOrder} orders={this.state.orders[key]} />
        )
    }
</ul>

性能:

1、在react中,当组件状态改变时,它会触发整个子组件数重新渲染,以根组件作为渲染基点。为了避免不必要的子组件重新渲染,你需要使用PureComponent或者实现 shouldComponentUpdate。

2、在Vue中,一个组件在渲染期间依赖于自动追踪,因此系统知道提前预判哪一个组件需要渲染当组件状态发生改变时。每个组件可以被认为具有自动为你实现shouldComponentUpdate,不需要注意嵌套的组件。

状态管理:
1、在React中一个比较大的内容就是函数式编程。如果你用过现在流行的Redux状态管理库,你大部分的开发时间都是在写函数式的内容。
2、与Redux类似,Vuex也受到Flux的启发。 然而,与Redux不同的是,Vuex改变了状态,而不是使状态不可变,并像Redux的“reducer”函数一样完全替代它。


vue 的双向数据绑定:

vue 和react 其实都是单向数据流,但是vue 支持双向绑定。
先介绍一下 mvvm:

JS 几个流行的框架 Vuejs、Ember.js、AngularJS 都使用 MVVM 模式,该模式叫做视图模型双向数据绑定,以达到数据和视图快速同步的目的。

image.png
  • View: 视图,模板,显示数据的;
  • Model: 代表数据,可以在 Model 层中定义数据修改和操作的业务逻辑
  • ViewModel :连接 Model 和 View。

那么如何通过ViewModel 链接View 和Model 达到数据同步呢?

1、Model (数据)-> View(视图),
2、View(视图)-> Model (数据)

实现数据传递,我们就要去监听数据变化和视图的变化

监听DOM 改变:

  • 就是 DOM 的改变,我们监听到之后,将模型变量 message 做同步更改!就是视图改变传递到了模型上

监听模型数据变化,数据劫持:

var o = {}; // 创建一个新对象

// 在对象中添加一个属性与存取描述符的示例
var messageValue;
Object.defineProperty(o, "message", {
  get : function(){
    return messageValue;
  },
  set : function(newValue){
    messageValue = newValue;
  },
});

关于 Object.defineProperty 大家可以参考:Object.defineProperty。除此之外 ES6 的 Proxy 也可以完成此项功能。据称 vue3 就会使用 Proxy 代替 defineProperty。

观察者模式,Observer

观察者模式(也叫模型 Model - 视图 View 模式、源 Source - 收听者 Listener 模式或从属者模式)是设计模式的一种。在此模式中,一个目标对象管理所有依赖它的观察者对象,并且在本身的状态改变时发出通知。也就是本例中,模型就是目标对象,而所需要更新的各种视图DOM就是观察者

vue数据劫持的原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容