优势一、声明式开发
首先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. ubuntu18.04 与 python

    Ubuntu安装pycharm专业破解版方法 首先我们要下载pycharm的安装包, 地址为https://www.jetbrains.com/pycharm/download/#section=li ...

  2. python 爬虫系列03--职位爬虫

    职位爬虫 import requests from lxml import etree cookie = { 'Cookie':'user_trace_token=20181015184304-692 ...

  3. Ruby初探

    官方网站:https://www.ruby-lang.org/zh_cn/ 标准库API文档:http://ruby-doc.org/stdlib-2.3.0/ 简介特性安装Ruby 命令行选项编码语 ...

  4. Navicat Premium v12.0.23.0 安装,使用激活码激活

    1 下载 可以直接官网下载安装包,也可以直接到我的云盘下载 下载地址:https://pan.baidu.com/s/1apwU9cIKBTr-z0CuJEJ9gg 文件包中包含下面的文件: 2 安装 ...

  5. 使用jxl读取excel内容,并转换成Json,用于Datagrid

    一.上传excel文件,得到InputStream,由InputStream得到Jxl中的Workbook,取出内容,存到二维数组中. 1.使用 Jquery Uploadify 插件(http:// ...

  6. 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04

    80X86中断系统 能够处理256个中断 用中断向量号0-255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1.中断的分类 中断可以分为内部中断和外部中断. (1)内 ...

  7. swpuctf-web部分学习总结

    1.用优惠码 买个 X ? (1)第一步: 这道题第一步主要知道利用php的随机种子数泄露以后就可以利用该种子数来预测序列,而在题目中会返回15位的优惠码,但是必须要24位的优惠码,因此要根据15位的 ...

  8. Java Web SpringMVC AJAX,实现页面懒加载数据

    因为做的微信端的网页,所以在显示后台数据的时候,要么分页,要么全部加载数据,开始分页对于用户来说,其实体验不是很好,毕竟要去不断的点击下一页,但是如果我把全部数据读取出来的话,但用户可能也就看前面几条 ...

  9. 【ubuntu】给新装好的UBUNTU系统配置静态IP

    最近在自己装有win7系统的thinkpad电脑上,给安装了Ubuntu16.04双系统. 想在ubuntu下配置一个hadoop伪分布式,最首要的就是要给系统配置一个静态IP . 一开始我按照网上的 ...

  10. 操作系统-Interrupts