优势一、声明式开发
首先react是声明式的开发方式,这个与之对应的是命令式开发方式,之前在用jquery写代码的时候,都是直接来操作dom,直接操作dom的这种编程方式,我们把他叫做命令式的编程,也就是我要创建一个页面,我要一点点的告诉dom,你要怎么去挂在,你要怎么去做,这种编程方式我们叫做命令式的编程。回头想想,我们代码里面有60%到70%的代码都在对dom进行操作。
那什么是声明式的代码,其实react就是一个声明式的开发。可以这么理解,假设我要去盖一栋楼,把这栋楼理解成一个网页,用jquery写的时候需要去告诉他这栋楼需要一步一步怎么去盖,先盖什么,再盖什么,每一步都要去关心。react不是这样的,react是面向数据来编程的,他只要把数据构建好就可以了。react会根据这个数据自动去构建这个网站,也可以理解成这个数据是个图纸,当图纸好了的时候,react会自动根据图纸去构建这个大厦。帮助构建整个页面的dom。这种声明式的开发可以节约掉大量的操作dom的代码。这是react编程带来的第一个优势
优势二、可以与其它框架共存
react编程的过程中,可以使用jquery,vue这样的框架,与这些框架可以完美的并存,那怎么才能做到公共使用,react才能不去影响到其它框架的代码呢。我们在app.js里面,dom挂载到了root的节点上。也就是react他只去管理index.html下面,id为root的div下面的代码。下面的dom跟react一点关系也没有。所以可以引用jquery操作下面的dom,只要不用jquery去操作id为root下面的内容就可以。这个时候jquery和react是可以共存的
优势三、组件化
有个概念叫单向数据流
父组件可以给子组件传值,但是子组件只可以使用这个值,绝对不可以去改变这个值。一旦改变了,react会报一个错误出来。Cannot assign to read only property 'list'。什么意思呢。list是只读的,这就是单向数据流。
之所以设计这个单向数据流,是为了我们开发,测试方便,不容易遇到坑。举个例子,假设父组件有5个子组件,list可以传递给这5个组件,假设没有单向数据流,某个子组件删除了list,那么其它4个组件都会受到影响。那一旦出现bug,就需要去找哪里改了list。每个组件一个个去看。这样调试非常不方便。如果一定要修改,copy一份。
react是一个视图层的框架
都知道,父子组件可以进行一个传值,假设我的一个项目极其的复杂。父组件有儿子1,儿子2,儿子1有孙子1,孙子2。儿子2有孙子a,孙子b。这个时候孙子1要给孙子a传值,如果还根据父子组件属性,然后子组件调用方法的传值的方式,就会疯掉了。本来两个组件的通信,结果中间儿子1,父组件,儿子2都要参与到这个组件里面来。很麻烦。所以在开发大型项目的时候,光用react的时候是不行的。还要配合一些数据层的框架。帮我们解决react之间复杂传值的问题。这个时候react就把自身定义为视图层的框架。我并不是什么问题都解决,我就帮助解决数据和页面渲染之间的问题。至于组件之间这么传值,我并不复杂,我交给其它组件来做。在小的项目中,光用react就可以,比如todolist,就两层组件,光用react内部机制就可以解决。在大型项目里,单单来使用是不够的。就需要比如flux,redux这样的数据层框架来辅助我们的开发。到这就能理解为什么react定义为视图层框架,而不是大型的完整的框架。
react之中的函数式编程
我们在编写react的时候,其实写的都是一个个函数,constructor,render,handleClick,都是一个函数一个函数的写法。react的函数式编程带来了几个好处。首先维护起来比较容易,当一个函数比较大的时候,可以进行拆分,每个函数各司其职,这是最基础的一个优势。第二个是什么呢?我们现在前端届有个面向测试的一个流程,什么意思呢,很多前端的项目,现在已经引用了自动化测试的这样一个概念,在做前端自动化测试的时候,如果你的一个项目之中,代码的组成都是一个个函数组成的话,那么做自动化测试的时候就非常容易进行测试,只要给一个函数一个输入值,看一下输出是否符合我的预期,我就能知道这个函数是否运行的正确,他给前端自动化测试带来很大的便捷性,这也是react函数式编程的一个优势。

围绕react衍生出来的思考的更多相关文章

  1. React.js入门笔记(续):用React的方式来思考

    本文主要内容来自React官方文档中的"Thinking React"部分,总结算是又一篇笔记.主要介绍使用React开发组件的官方思路.代码内容经笔者改写为较熟悉的ES5语法. ...

  2. React 实现 Table 的思考

    琼玖 1 年前 (写的零零散散, 包括github不怎么样) Table 是最常用展示数据的方式之一,可是一个产品中往往很多非常类似的 Table, 但是我们碰到的情况往往是 Table A 要排序, ...

  3. react项目组件化思考

    三个原则 single store render from top immutable data single store,便于组件之间通信. render from top,因为store就一个,每 ...

  4. 关于NOIP2014“无线网络发射器选址”一题的衍生题目的思考及思维方向

    无线网络发射器选址 题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形 ...

  5. (三)React基础

    3-1 使用React编写TodoList功能 import { Fragment} from ‘react’ Fragment是占位符 用于替代最外层div元素, 防止生成的元素会有两层div嵌套这 ...

  6. 浅谈React数据流管理

    引言:为什么数据流管理如此重要?react的核心思想就是:UI=render(data),data就是我们说的数据流,render是react提供的纯函数,所以用户界面的展示完全取决于数据层.这篇文章 ...

  7. 使用Yarn+Webpack+Babel6搭建React.js环境

    使用Yarn+Webpack+Babel6搭建React.js环境 Facebook开源的React.js已经改变了世人对前端UI的思考方式.这种基于组件方式的优势之一,就是使View更加的简单,因为 ...

  8. react与vue

    vue的选择居于react与angular之间,框架自身的语法比react多一点,但是又比angular少一点. 也正是由于选择的不同,所呈现出来的写法与思考方式就一定会有所差异,不论优劣,但肯定会导 ...

  9. 探索 Redux4.0 版本迭代 论基础谈展望(对比 React context)

    Redux 在几天前(2018.04.18)发布了新版本,6 commits 被合入 master.从诞生起,到如今 4.0 版本,Redux 保持了使用层面的平滑过渡.同时前不久, React 也从 ...

随机推荐

  1. oracle 备份恢复篇(五)---rman 剩下控制文件和spfile

    一,环境准备 ❤ 拥有全量备份文件

  2. 学习javscript函数笔记(二)

    定义: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代码复用.信息隐藏和组合调用.函数用于指定对象的行为. 1.函数对象 JavaScript中的函数就是对象,函数对象连接到Fun ...

  3. 使用params

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 【Linux】Linux下使用Docker快速部署Oracle数据库

    安装最新Docker wget -qO- https://get.docker.com/ | sh` 安装 docker-compose sudo curl -L https://github.com ...

  5. java的访问修饰符

    Java中通过访问控制符(default,private,public,protected)来控制对类.变量.方法.构造方法的访问. 下表说明了4中修饰符的访问权限: 修饰符 当前类 同一包内 子孙类 ...

  6. Flask 编写http接口api及接口自动化测试

    片言 此文中代码都是笔者工作中源码,所以不会很完整,主要摘常见场景的api片段用以举例说明 另:此文主要针对自动化测试人员,尤其有python基础阅读更佳. 笔者使用 python3.6 + post ...

  7. C# 面试题二

    1.        请编程实现一个冒泡排序算法? int [] array = new int [*] ; ; ; i < array.Length - ; i++) { ; j < ar ...

  8. 接收时间戳model [JsonConverter(typeof(UnixDateTimeConverter))]

    /// <summary>        /// 创建时间        /// </summary>        [JsonProperty("createtim ...

  9. 1、块:ion-item

    因为ion-item 一般写于ion-list里 所以在ion-list里面我会仔细讲解. 1. ion-badge /* --- page1.html ---*/ <ion-navbar *n ...

  10. [转]JFreeChart简介及下载、配置

    JFreeChart简介 JFreeChart是完全基于Java语言的开源项目,因此可以使用在Java开发环境中,包括Java应用程序,或者是Java Web应用都没有任何问题.结合iText项目,可 ...