面试题集二 ——react相关

2019-11-17  本文已影响0人  月半女那

1. react 虚拟DOM

  1. 将代码转换成JS对象,然后由JS对象转换成真实DOM
  2. 如果是首次渲染,其实vitruaDom不具有任何优势,甚至更加消耗内存,但是它的优势在于diff算法和批量处理策略
  3. react基于virtialdom自己实现了一套事件机制自己模拟事件冒泡,捕获,采用事件代理,批量更新,解决兼容性问题,它将virtualdom上的事件映射到真实的Dom事件,然后将所有的事件都代理到document上,进行统一分发
  4. react.createElement 将 props,children , 进行批量处理,传递给reactElement
  5. $$typeof 是一个symbol类型的变量,可以防止xss攻击,由于json中是不能存储symbol对象的
    (xss:它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的)

2. react 渲染流程

  1. 使用react.createElement /JSX 编写文件最后都会通过babel转换成 createElement
  2. createElement 对key和ref等props做了处理,获取defaultProps对默认props进行复制,对传入的子节点处理,最后形成虚拟dom
  3. reactdom.render将生成好的虚拟dom渲染指定容器上,然后采用了批量处理,事务机制等对指定浏览器进行性能优化,最后转换成DOM

3.setstate

调用setstate不用立即更新
setstate本身不是异步的,只是在调用setstate的时候,如果react处于更新状态。当前更新会暂停,等上一次更新执行后在执行


BH4JE_KPRLTQ@6RFS{`XG6A.png

4. bind(this)

  1. 由于在调用事件过程中并没有指定调用的组件所以需要手动绑定,否则this = undefined
  2. 箭头函数不会创建自己的this,它只会从自己作用域上一层继承this

5. react事件执行顺序

1.由于react的所有事件都是挂载到document上的,当真实的dom触发冒泡,到document后才会对react事件进行处理

  1. 先执行原生的事件
  2. 然后执行react合成事件
  3. 最后执行真正在document上挂载的事件

6. mixin , hook, hoc

  1. mixin:混入
    将一个对象的属性拷贝到另一个对象上,可以是多个,也可以是一个,这是extends无法实现的。
    缺点:1. mixin 可能会相互依赖,相互耦合,不利于后期的维护,2. 不同的mixin中的方法会冲突
  2. hoc
  1. hooks
    只能在函数式中使用

7. redux

8. react新特性

9. diff算法

在调用react renderd 的时候,会创建react元素组成的树,在下一次,state和props更新的时候,相同的render会返回不同的树,就需要不叫这两棵树的差别,常规操作一般需要的算法的复杂度o(n^3),但是一旦元素过多则会开销过大,造成页面卡顿,所以,react提出了两个假设:

  1. 两个不停类型的元素会产生不同的树
  2. 开发者可以通过key,props来暗示哪些子元素在不同的渲染下保持稳定
    这样算法的复杂度就是o(n)
    可以分为: tree diff / component diff /element diff
上一篇 下一篇

猜你喜欢

热点阅读