简单总结

React的工作原理
        - UI = f(data),data包括props和state,改变data从而使UI发生改变,而不是直接操作UI
        - 一切都是组件
        - 声明式编程
React生命周期
分为三个阶段,MOUNTING,RECEIVE_PROPS,UNMOUNTING。
阶段一:MOUNTING
       mountComponent负责生命周期中的getInitialState、componentWillMount、render和compontDidMount。
       getDefaultProps指定默认的props值,通过构造函数进行管理,生命周期中最早执行的,只执行一次。
       componentWillMount中如果调用setState方法,不会触发重新render,而是会进行state合并,所以最新的state需要在render中才能取到。
      mountComponent是通过递归渲染内容,由于递归特征,所以父组件componentWillMount在子组件的componentWillMount之前调用,而父组件的componentDidMount在其子组件的componetDidMount之后。
阶段二:RECEIVE_PROPS
       updateComponet负责管理生命周期中的componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、render和componentDidUpdate。
       componentWillReceiveProps中使用setState是不会触发重新render,会进行state合并,只有在render和componentDidUpdate才能获得最新的state值。
       shouldComponentUpdate判断组件是否要进行更新,这也是性能优化的核心点。
       updateComponent本质上也是通过递归渲染内容的,所以父组件componentWillUpdate在子组件componentWillUpdate之前,componentDidUpdate在子组件componentDidUpdate之后。
阶段三:UNMOUNTING
       unmountComponent负责管理生命周期中的componentWillUnmount调用setState是不会重新render的,会重置所有相关参数、更新队列以及更新状态。
diff算法
       传统diff算法通过循环递归对节点依次比较,算法复杂度达到O(n^3),React的diff算法复杂度是O(n)。
         diff算法:从根节点开始,递归的方式逐步往下比对,先比较两个节点的类型是否相同,如果不相等,就彻底放弃掉,然后unmount,再重新mount,如果类型相同,就走update生命周期。
         对于同一级的一组字节点,需要设置设置一个key,key要保持唯一,稳定,不推荐使用数组下标index当作数组的key,比如可以使用数据源中每一项的id(如果数据源每一项存在唯一的id值)。
React中一切皆为组件
         好的组件不受其他组件约束,只要遵守一样的props。
声明式编程
         对应函数式编程,只需要声明画成什么样子,具体画成什么样是怎么画的,都交给React。
函数式编程关心数据的映射,命令式编程关心解决问题的步骤
使用props还是state
       props:外部传入的数据
       state: 组件内部状态,尽量少,推动到系统边缘处
       父级组件所传递的props,作为子级的state,会产生引用对象影响问题,也就是更改子级state,父级props被相应更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值