
react-最美的语言
文章平均质量分 55
不断领悟的过程
咩咩羊10
微光·炬火
展开
-
虚拟DOM中key的原理总结
1.虚拟DOM中key的作用:key是虚拟DOM对象的标识,key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识。当状态中的数据发生变化时,react会根据【新数据】生成【新的虚拟DOM】,随后React进行【新虚拟DOM】与【旧虚拟DOM】的diff比较,比较规则如下:旧虚拟DOM中找到了与新虚拟DOM相同的key:1)若虚拟DOM中内容没变,则直接使用之前的真实DOM2)若虚拟DOM中的内容变了,则生成新的真实DOM,随后替换掉页面原创 2021-06-14 16:14:56 · 292 阅读 · 0 评论 -
调用 setState 之后发生了什么?
调用 setState 之后发生了什么?React 会为当前节点创建一个 updateQueue 的更新列队。然后会触发reconciliation 过程,在这个过程中,会使用名为 Fiber 的调度算法,开始生成新的 Fiber 树, Fiber 算法的最大特点是可以做到异步可中断的执行。然后 React Scheduler 会根据优先级高低,先执行优先级高的节点,具体是执行 doWork 方法。在 doWork 方法中,React 会执行一遍 updateQueue 中的方法,以获得新的节点原创 2021-03-31 20:15:35 · 1263 阅读 · 0 评论 -
react生命周期-各阶段详解
装载阶段装载阶段组件被创建,然后组件实例插入到 DOM 中,完成组件的第一次渲染,该过程只会发生一次,在此阶段会依次调用以下这些方法:constructorgetDerivedStateFromPropsrendercomponentDidMountconstructor用处组件的构造函数,第一个被执行。若没有显式会有一个默认的构造函数,若显式定义必须在构造函数中执行 super(props),否则无法在构造函数中拿到 this。原因见constructor里面为什么必须写super(原创 2021-03-26 12:19:02 · 350 阅读 · 0 评论 -
react一些容易混淆的点
React 中列表渲染需要设置key, key 的作用React 自己用的一个特殊属性,即使为一个组件设置 key 之后,我们也无法获取这个组件的 key 值。它是一种身份标识,每个 key 对应一个组件。React 中 key 值在兄弟元素之间必须是唯一的,不过,不用全局唯一React 中的唯一标识 key 在更新 DOM 时会用到,与虚拟 DOM diff 算法强关联v16.3 && v16.4 生命周期v16.3v16.4主要改动getDerivedState原创 2021-03-26 11:04:57 · 152 阅读 · 0 评论 -
state更新不生效之——派生状态
更新当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:static getDerivedStateFromProps()shouldComponentUpdate()render()getSnapshotBeforeUpdate()componentDidUpdate()getDerivedStateFromProps静态方法,所以不能在这个函数里使用 thisstatic getDerivedStateFromProps(props, sta原创 2021-03-19 18:05:19 · 393 阅读 · 0 评论 -
React16.4以上生命周期【新】
挂载当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下:constructor()static getDerivedStateFromProps()render()componentDidMount()componentWillMount 即将在v17.0版本废弃,慎用!getInitialState\getDefaultProps 已被弃用更新当组件的 props 或 state 发生变化时会触发更新。组件更新的生命周期调用顺序如下:static getDerive原创 2021-03-19 17:19:38 · 180 阅读 · 0 评论 -
constructor里面为什么必须写super(props)
class Son extends Fa { constructor(props) { super(props); // 调用父类的constructor(),必须放在前面 this.attr1 = attr1;//必须放在super(props)之后,否则报错 } toString() { return this.attr1 + ' ' + super.toString(); // 调用父类的toString() }}了解constructorES6中每个类原创 2021-03-19 16:22:30 · 850 阅读 · 0 评论