haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.4k stars 3.25k forks source link

[react] 简要描述下你知道的react工作原理是什么? #611

Open wwwind213 opened 5 years ago

wwwind213 commented 5 years ago

[react] 简要描述下你知道的react工作原理是什么?

lishichengyan commented 4 years ago

dom diff: https://zhuanlan.zhihu.com/p/20346379

paultyh commented 4 years ago

1、MVVM设计模式 2、数据驱动虚拟DOM 3、通过props,state作为状态机管理组件内数据

postbird commented 4 years ago

我理解的核心部分:

同时 React 实现了数据驱动与渲染平台剥离,通过统一的调度与Diff 算法,可以引用到不同的渲染环境,如 Native 、浏览器、Canvas 等

vkboo commented 3 years ago

React以组件为基本的工作单位,每个组件都有自己的render方法(函数式组件直接返回)返回一个jsx结构用于描述组件的UI,组件有自己的状态state和从父组件接受的数据props;当state或props发生改变时,会引起React内部开始进行Reconciler(即DOM diff)操作,这个操作会首先检查当前节点的state和props是否改变,来决定是否更新当前节点的状态并执行响应的生命周期函数,并把节点差异存放在effect list(diff结果)中,一个节点检查完了之后会按照从顶向下、兄弟节点间逐级构造的方式进行循环这个操作,这个过程时可暂停的,依靠浏览器的requestIdelCallback进行调度;Reconciler完成了之后,这个组件树更新前后的diff结果已经算出来了,接下来就是不可中断commit操作,这个操作会把diff结果应用到真实的DOM上,执行componentDidMountcomponentDidUpdate声明周期,整个更新流程完成。