组件书写:
es6 class形式,有状态,容器,智能组件
functional, 无状态,傻瓜式组件,只接受props属性/props方法
react.createClass,
props传递:
root把props传给child
props有对象或者方法
child可以维护自己的state
child通过回调,使得root可以获取child的state
生命周期:
constructor
inistate: 要设置默认值, functional组件无状态
getdefaultprops: 要设置默认值,以及数据类型
willmount: wuillmount可以做的事情都可以在construstor里先做。可以在这请求接口,可以setState
render:不要在这里setstate,书写要规范,最好把结构提出来,return里尽量简单,逻辑判断在return外面做
didmount:最好这里请求接口,可以setstate
willreceiveprops: 组件中props/state 更新时会触发,有事需要手动作新旧值判断来setstate,父组件rerender时也会触发,
shouldUpdate:这里通常作浅比较来决定是否rerender,提高性能,true更新,false不更新,不会执行后面的rerender,purcomponent是内置的优化,针对这个时期
willupdate:不要setState,会引起死循环
render
didUpdate:
redux
组件中dispatch action的type
action里异步请求接口,请求完毕return type
reducer根据action return的type 来作state合并更改, 纯函数, 性能优化地方,immutable优化
store合并所有的reducer
provider组件把store传给root
root通过connect方法把state传给comp作props,性能优化地方,内置了对shoucomponent的优化
单向数据流,避免数据冗余,数据全局共享
react实现数据共享
context
从root中提出共享数据到context中。
child从context中读取数据
减少prop传递的层级,提高性能
这就是react-redux的工作
provider是一个高阶组件
高阶组件:
重用代码,根据别人的组件开发自己的组件
代理方式
操作props: 传入一个组件和props, 操作props和组件的结合, 返回新的组件
访问ref: 传入一个组件 给组件添加上ref, 方便以后通过ref操作该组件
抽取state: 将部分state抽离,放到context中,方便派发给其他组件。也就是react-redux的connect方法
包装组件:传入组件的样式,返回新样式的组件
继承方式:
继承传入的组件: 传入的组件作为父, 输出的组件为child
操作props
操作组件的生命周期:根据条件,让传入的组件render
性能优化:
shouldcomponentUpdate: react-redux,浅比较, purecomponent
immutablejs, redux-immutable:不全部拷贝数据,重用不变的数据
reselect函数,函数的记忆功能
多组件优化:fiber算法,
1,节点类型不同,直接更新整个组件,willunmount会触发。
2,节点类型相同,直接修改变化的部分。其他不渲染。
3,key的使用,快速定位
setstate:
异步的,
不能马上得到新的state,
可以在setstate中使用回调,回调中可以得到新的state
事件系统:
采用的是事件委托,和自动绑定到最外层,didmounmt阶段绑定
willunmount阶段解除
使用冒泡来委托, 没有捕获阶段
有些原生事件在react中没有实现
this绑定:
constructor中bind
render元素中bind 或者 :: 或者箭头函数
直接箭头函数
受控组件,非受控组件:
受控:输入 – state(过滤,操作, 防注入) – view 存在性能问题
非受控: 输入 – view -ref- state
表单元素: value,selected,checked, onchange
组件通信:
父–子:props
子–父:1,回调函数,2,自定义事件机制: prop方法
跨组件: context,减少层级,但会造成很多共享数据
没有关系的组件: pubsub订阅发布, eventmitter
组件间抽象: mixin 不提倡, 高阶组件 使用es7的修饰符
虚拟don:
module – vdom – dom
vdom diff patch — dom render