在我的工作用到的最多就是backbone,其次还会有ember/Ext,backbone目前能实现我们team所需要实现的功能,因为我们的component不需要频繁的操作Dom,当后台API返回数据之后,就刷新整个component,就没有必要去用react 里面的虚拟dom 去实现了。但是后来有个新的需求,需要做一个频繁操作DOM的setting component,这是用backbone就完全体验不到backbone能带来的便捷,还是需要在整个DOM渲染完成之后,去获取DOM 节点,然后操作DOM节点,这样很耗性能。不过还好,我们的team对于这种需求还是比较少了。

下面不得不提为什么那么多team选择用react去开发他们的产品,react在那些方面有提升呢?

React 是一个用于创建可复用,可聚合的web component 的js库。React是提供了MVC中的V层,并不是一个完整的MVC框架。

1.组件化,而不是写一大堆的HTML模板

  react将js逻辑和HTML标签封装到一起,使js和html紧密连接,有助于理解。

  在backbone/angalur里面都是需要template进入一个html模板,但是react只需要一个render方法,把html 作为render的返回值就行了

2.单向数据流(unidirectional data flow)

  单向数据流听起来很低级,没有双向数据流那么高级。但是react为什么选择用单向数据流呢?

  单向数据流和之前angular提出的two way data binding想比较而言,使各种变化变得可预计、可控制的。不会向two way 打他binding那样,变化一旦复杂起来,大家相互触发变化,到最后一个地方变 了,你根本猜不出来还会导致其他什么地方跟着变,这对一个team来学,学习成本也是很大的。react还提供了不可变数据,大大的节约了脏检查的消耗。那么还有其他的好处,比如:

  每个组件是干啥的,很直观

  结果更加可预测

  组件之间的关系更加清晰

  没有确切的DOM操作

  不再有数据模型的肮脏检查

  react单向特性导致数据一旦更新,就会渲染整个app,这样听起来好像也是挺低级的,渲染这个app也是耗性能的。但是当你创建一个很复杂的组件的时候,去管理UI的状态就不是一件简单的事情了。

  通常管理UI的状态需要以下几步:

    1.接受用户的输入

    2.异步API数据请求

    3.修改数据

    4.修改DOM

分析到这里,发现我们项目用的backbone完全可以被替代掉。

比较一下backbone和react渲染

  backbone:

    1.浏览器请求页面

    2.服务器请求数据库

    3.将数据传给模板

    4.模板渲染页面

  react:

    1.用户输入

    2.从API获取数据

    3.将数据传给顶层组件

    4.React将每个组件渲染出来

3.虚拟DOM Tree

  Js虽然很快,但是dom操作很慢。

  React在每一个更新时,都活重建DOM tree,找到与上一个版本的DOM的差异,计算出最新的DOM更新操作,然后从草最队列中批量的执行更新DOM操作

  React的jsx使react的代码更易懂

4.React可以在服务器端渲染(这个还么有实践过,只是知道可以在服务器端渲染)

  1.支持SEO关键字收录

  2.用户访问不需要等待过程的loading动画

  3.支持同构

  4.支持更多的后端如nodejs模板

  

(这只是当前阶段的一个简单理解,后续还会有更新。。。。)

  

react总结的更多相关文章

  1. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  2. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  3. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  4. React 入门教程

    React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...

  5. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  6. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  7. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  8. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  9. React的使用与JSX的转换

    前置技能:Chrome浏览器   一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...

  10. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

随机推荐

  1. Kendo UI开发教程(8): Kendo UI 特效概述

    Kendo UI Fx 提供了一个丰富,可扩展,性能经过优化的工具集合用来完成HTML元素的过渡显示.每种特效近可能的使用CSS Transition ,对于一些老版本浏览器使用修改属性的方法作为补充 ...

  2. transaction manager has disabled its support for remote/network transactions. 该伙伴事务管理器已经禁止了它对远程/网络事务

    最近再用SSIS做数据归档,里面用到了分布式事务.在开发阶段是在一台计算机上运行只要是启动分布式服务就没什么问题,可是昨天把它部署到uat的时候遇到问题,错误信息是: 最后找到解决方案: 确认&quo ...

  3. Android 布局详解

    Android 布局详解 1.重用布局 当一个布局文件被多处使用时,最好<include>标签来重用布局. 例如:workspace_screen.xml的布局文件,在另一个布局文件中被重 ...

  4. 如何发布一个自定义Node.js模块到NPM(详细步骤)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  5. Linux下安装zookeeper集群

    首先,准备三台Linux虚拟机 三台机器 centos01 :192.168.1.168(lxs001)   centos03 :192.168.1.178(lxs003)   centos03 :1 ...

  6. Js-Html 前端系列--checkbox

    今天搞全选按钮,设置Checkbox的时候,处于Checked状态但是不显示勾.最后得出解决方案: var c = boxcList.eq(i).attr("checked"); ...

  7. html - table 表格不被撑开,td某些列宽度固定某些列自适应

    table-layout 属性的解释:http://www.w3school.com.cn/cssref/pr_tab_table-layout.asp 1,实现table细边框,设置如下css: t ...

  8. [ios2]蓝牙通信【转】

    iPhone开发应用中关于GameKit蓝牙实例讲解是本文要介绍的内容,主要是来了解并学习GameKit蓝牙实例.介绍一下这个实例实现的是两个带有蓝牙设备的touch之间的一个小游戏,在界面上有个可以 ...

  9. FragmentTransation中的remove和detach有什么区别?

    remove(): 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁; detach(): 会将vi ...

  10. NLog在MVC中使用

    NLog在MVC中使用 在site根目录新建NLog.config <?xml version="1.0"?> <configuration> <nl ...