响应式系统与 React|青训营笔记

65 阅读2分钟

**这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

React设计思路

UI编程痛点:

  • 状态(即声明的变量)更新,UI不会自动更新,需要手动调用DOM进行更新;
  • 代码没有组件化,欠缺代码封装与隔离;
  • UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到回调地狱。

响应式编程:

  • 状态更新,UI自动更新
  • 前端代码组件化,可复用,可封装
  • 状态之间的互相依赖关系,只需声明即可(如A=B+C的关系,每次不需要再手动维护)

React的设计与实现——组件化:

  • 组件是原子组件或组件的组合
  • 组件内拥有状态,外部不可见
  • 父组件可将状态传入子组件内部
  • React是单向数据流(父组件给子组件传东西)

组件设计:

  • 组件声明了状态和UI的映射(根据当前的State和Props返回一个UI)
  • 组件有Props和State 两种状态(Props是父组件传给它的状态/State是组件自身的私有状态)
  • 组件可由其它组件拼装而成

React 推荐使用组合来进行组件的复用,而不是继承,背后有什么样的考虑?

降低代码耦合度,提高复用性。通过继承实现的代码复用是一种“白盒复用”,通过组合实现代码复用是一种“黑盒复用”,对象内部细节不可见。

Props/State/Refs

React属性Props:组件其实就是函数,接受特定的输入(props),产生特定的输出(React Elements.return jsx)。React的组件必须像纯函数那样使用其props,props是外部传入的,不可修改。 React状态State:状态是私有的,组件内部的数据可以动态改变,通过this.setState()方法。 Refs:Refs可以用来操作DOM,使用场景有:获取图片宽高、输入框聚焦。要写成回调形式的ref。 Forms表单是受控组件,用Refs将其转换为非受控组件。

Context

Props是由上到下单向传递的,Context提供了在组件中共享全局数据的方法。 React.createContext() Context是一个对象,里面有两个变量:Provider和Consumer,都是组件,在根节点外侧用Provider进行包裹,在需要使用此数据的结点外侧用Consumer包裹。

组件间通信

利用redux可以支持任何形式的通信。