之前为了学习redux买了一本《深入浅出react和redux》,只看了redux部分。最近重新一遍,还是很有收获,这里结合阅读文档时的一些理解,记下一些初学者可能不太注意的东西。

原则

1.react原本的目标是为设计视图组件,UI=render(data);一个react组件有两个数据源可以驱动渲染,一个是记录内部状态变化的state,一个是外部传入的props。由于props中的变量可能在外部的某个地方被引用,因而props中的数据是绝对不能修改的。

生命周期

2.react组件的生命周期有三个过程:Mount、Update、Unmount,每个过程都会触发钩子函数:

Mount----

constructor:创建一个组件类的实例,一般用来设置state和绑定成员函数的this;无状态的组件不需要constructor

getInitialState:调用React.createClass时才调用,调用React.createClass已被官方弃用。

getDefaultProps:调用React.createClass时才调用,调用React.createClass已被官方弃用。

componentWillMount:渲染前触发(一般不需要)

render:渲染组件

componentDidMount:渲染完成后触发,比如在这里执行ajax;只能在浏览器中调用

Update----

componentWillReceiveProps:组件传入的props改变或父组件重新渲染时触发

shouldComponentUpdate(nextProps,nextState):返回布尔值决定该次更新是否继续

子该函数中,this.state是setState之前的值。通过this.state,next.state,this.props,next.props对比,决定是否渲染,可以提高组件性能

componentWillUpdate:

render:

componentDidUpdate:可在服务器端或客户端调用。

Unupdate-----

componentWillUnmount:唯一一个卸载过程触发的函数,作者提醒,在mount时通过非react方式创建的dom容易造成内存泄漏,需要在这里手动清除。

数据流

react中的数据流是自上而下的,父组件可以将props、state、自定义的一些js对象、方法、字符串传给子组件,作为子组件的props,逐级下传。

当几个组件需要共享某个状态变量的时候,react文档提到一个概念“lifting state up”:意思是将这个共享的状态变量放到最近的一个共同父组件中,由这个父组件以props的方式传给子组件。

状态管理

当我们的应用逐渐变大复杂的时候,往往会发现组件状态管理变得麻烦,对状态进行集中管理是一个好的方案。

1.redux由flux改进而来,使用redux,全局只有一个store保存整个应用的state,这个state是由一个root reducer函数返回的。

2.每当某个组件对应的state需要更新时,调用store.dispatch(action)方法,让root reducer函数根据action.type计算出新的全局state。而action只是一个携带信息的纯js对象。

3.root reducer 内部可以根据action.type调用子reducer函数,该子函数用于计算对应于某个组件的state。

4.单纯使用redux时,在组建生命周期中其实只需要用到store的4个方法:.dispatch()  .subscribe()  .unSubscribe()  .getState() 。

5.redux把组件分两类:无状态的展示组件和有状态的容器组件。用connect()()方法将容器方法(跟踪state,触发state改变)和展示组件封装并生成容器组件。

6.使用redux时,由于app的架构发生了改变,文件结构变成了四个部分:

actionType.JS   //定义action类型

actionCreateor.js  //返回一个触发reducer的action

reducer  //计算新的state,其中state参数不可修改

store  //该文件返回一个全局store

component  //存放组件和connect方法生成的组件

6.扩展redux功能时可以使用中间件,中间件一般是增强store方法的功能,并在action到达reducer之前对其进行处理,比如异步action

7.为了便捷开发,可以引入“react-redux”,提供了Provider组件让我们全局访问store,connect函数生成容器组件

路由

就用react-router

v2~3版本是静态路由,直接配置url和组件的对应关系。

v4开始动态路由,将路由组件当作react组件来使用,跟app的组件耦合比较深,打包比较麻烦。

关于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. BUAA_OO 第一单元总结

    1.简单多项式求导 第一次作业的难点,我认为是对输入的预处理,尤其是正则表达式的使用.这次作业的思路是:首先将表达式进行预处理,(由于题目中要求不会有空格产生的WF,所以可以放心大胆的消除空格). 消 ...

  2. vue项目中使用bpmn-基础篇

    内容概述 本系列“vue项目中使用bpmn-xxxx”分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项 ...

  3. Linux系统管理第二次作业 目录和文件管理 rpm安装 创建yum仓库

    chapter02 - 03 作业      1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [ ...

  4. 【Linux常见命令】cat命令

    cat - concatenate files and print on the standard output cat 命令用于连接文件并打印到标准输出设备上. 用法: 1. cat file 查看 ...

  5. js中的this指针的用法

    首先看下面代码: function funcA() { this.name = "hello"; console.log(this.name); this.show = funct ...

  6. 以内存级速度实现存储?XPoint正是我们的计划

    随着计算能力虚拟化技术的普及,存储机制在速度上远逊于内存这一劣势开始变得愈发凸显. 这一巨大的访问速度鸿沟一直是各项存储技术想要解决的核心难题:纸带.磁带.磁盘驱动器乃至闪存记忆体等等,而如今最新一代 ...

  7. PLDroidPlayer 是七牛推出的一款免费的适用于 Android 平台的播放器 SDK,采用全自研的跨平台播放内核,拥有丰富的功能和优异的性能,可高度定制化和二次开发。 https://developer.qiniu.com/pili/sdk/…

    PLDroidPlayer PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 ...

  8. JavaScript从入门到精通(转)

    JavaScript从入门到精通 转自: https://github.com/Eished/JavaScript_notes 视频连接:https://www.bilibili.com/video/ ...

  9. 学习笔记之MySQL的使用

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文 ...

  10. 《Docker从入门到跑路》之多阶段构建

    多阶段构建就是在一个Dokcerfile中定义多个FROM,每个FROM都可以使用不同的基础镜像,并表示开始一个新的构建阶段,我们可以很方便的将一个阶段的文件复制到另外一个阶段中,在最终的阶段保存你需 ...