Web Copmpoents
React 组件
React 组件:
- 自定义元素是库自己构建的
- 渲染过程包含了模版的概念
- 实现均在方法与类中,相互隔离(不包括样式)
- 引用方式遵循 ES6
构建:
- React 方式:creatClass
- ES6 方式:class
- 无状态函数
React 底层——合成事件
事件委派
把事件处理函数绑定到结构的最外层,使用一个统一的事件监听器。(不会把事件处理函数直接绑定到真实的节点上)
自动绑定
每个方法的上下文都会指向该组件的实例——自动绑定 this 为当前组件。React 会对这种引用进行缓存,达到 CPU 内存最优。(使用 ES6 class 或纯函数时,自动绑定不复存在,需要手动绑定 this)
bind 绑定
绑定事件处理器内的 this,并可以向事件处理器中传参构造器内声明
好处:仅需进行一次绑定箭头函数
箭头函数自动绑定了定义此函数作用域的 this,因此不需要再用 bind 绑定
注意:React 中使用 DOM 原生事件,一定要在组件卸载时手动移除,否则内存泄漏。使用合成事件则不需要。
React 合成事件与 JS 原生事件对比
原生 DOM 事件传播 3 个阶段:事件捕获阶段、目标对象本身的事件处理程序调用,以及事件冒泡。
- 事件捕获阶段会优先调用结构树最外层的元素上绑定的事件侦听器,依次向内调用,一直调用到目标元素上的事件监听器为止。
1 | e.addEventListener("click", () => {}, false); |
第三个参数,若传 true,为元素 e 注册捕获事件处理程序,并且在事件捕获阶段调用。
- 事件冒泡与事件捕获相反,它会从目标元素向外传播,由内而外。
React 的合成事件仅支持事件冒泡
阻止原生事件冒泡用 e.preventDefault()
React 受控组件更新 state 的流程
- 可以通过在初始 state 中设置表单的默认值
- 每当表单的值发生变化时,调用 onchange 事件处理器
- 事件处理器通过合成事件对象 e 拿到改变后的状态,并更行应用的 state
- setState 触发视图的重新渲染,完成表单的组件值更新
React 非受控组件
是一种反模式,他的值不受组件自身的 state 或 props 控制。通常需要为其添加 ref prop 来访问渲染后的底层 DOM