React原理学习

React原理学习vdom和diffh函数vnode数据结构patch函数diff算法只比较同一层级,不跨级比较tag不相同,则直接删掉重建,不再深度比较tag和key两者都相同,认为是相同节点,不再深度比较JSX本质查看react编译结果:Babel编译后为createElement函数(h函数 ),返回vnode。// 参数一:标签名 / 组件变量// 参数二:attributes// 参数三及往后:children / textReact.createElem
摘要由CSDN通过智能技术生成

vdom和diff

  • h函数
  • vnode数据结构
  • patch函数

diff算法

  • 只比较同一层级,不跨级比较
  • tag不相同,则直接删掉重建,不再深度比较
  • tag和key两者都相同,认为是相同节点,不再深度比较

JSX本质

查看react编译结果:Babel

编译后为createElement函数(h函数 ),返回vnode。

// 参数一:标签名 / 组件变量
// 参数二:attributes
// 参数三及往后:children / text
React.createElement('tagname', null, [])
React.createElement('tagname', null, child1, child2, ...) 

组件名首字母大写(React规定),用于区分html tag / 自定义tag

合成事件

  • 所有事件挂载到document上
  • event不是原生的,是SyntheticEvent合成事件对象
  • 和Vue事件不同,和dom事件也不同

在这里插入图片描述

优势:

  • 更好的兼容性和跨平台
  • 载到document,减少内存消耗,避免频繁解绑
  • 方便事件的统一管理(事务机制)

setState和batchUpdate

  • 有时异步(普通使用),有时同步(setTimeout、DOM事件)
  • 有时合并(对象形式),有时不合并(函数形式)

在这里插入图片描述

同步setState过程

isBatchingUpdates = true

this.setState({
   
	count: this.state.count + 1,
});

isBatchingUpdates = false

异步setState过程

isBatchingUpdates = true

setTimeout(() &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值