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

96 阅读3分钟

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

React初探索

React的设计思路——UI编程痛点

  1. 状态更新,UI不会自动更新,需要手动地调用DOM进行更新
  2. 欠缺基本代码层面的封装和隔离,代码层面没有组件化
  3. UI之间的数据依赖关系需要手动维护,如果依赖链路长,则会遇到“Call不back Hell”

React的设计思路——响应式与转换式

image.png

  • 响应式系统

    事件——>执行既定的回调——>状态变更

React的设计与实现——响应式编程

  • 前端UI

    事件——>执行既定的回调——>状态变更——>UI变更

特点:

  1. 状态更新,UI自动更新。
  2. 前端代码组件化,可复用,可封装。
  3. 状态之间的互相依赖关系,只需声明即可。

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

  1. 组件是 组件的组合/原子组件
  2. 组件内拥有状态,外部不可见
  3. 父组件可将状态传入组件内部

  1. 组件内部拥有私有状态 State。
  2. 组件接受外部的Props状态提供复用性。
  3. 根据当前的State/Props,返回一个UI。

React的设计与实现——状态归属问题

例子:

image.png

Q:“当前价格”状态属于谁?

A:Root节点(小伏笔)

状态归属于两个节点向上寻找到最近的祖宗节点

Q:”当前价格“如何改变?

A:将onChangeValue()向下传递(在JavaScript中,函数是“一等公民”)

Q:React是单向数据流,还是双向数据流?

A:React遵循从上到下的数据流向,即单向数据流。

Q:如何解决状态不合理上升的问题?

A:进行状态提升,进行兄弟组件间的简单通信

Q:件状态改变后,如何更新DOM?

A:React并不会把更新的内容挂在真的DOM上,而是使用虚拟DOM,React提供了组件的一个私有的,其他任何组件没有权限改变的属性:state(状态),当组件内容需要变化,我们改变state的对应的值就可以了

组件设计

  1. 组件声明了状态和UI的映射。
  2. 组件有Props/State两种状态。
  3. “组件"可由其他组件拼装而成。

Reac的实现

  1. 创建虚拟dom的方式

    • ①使用原生js的方式去写(一般不用)

      使用原生js来创建虚拟dom时,此时script标签的type就不需要写成text/babel,写成原来的text/javascript就可以了,同时也可以删除babel库了,因为不需要它进行转换,浏览器本身就能识别

    • 使用jsx语法创建

  2. 关于创建的虚拟dom

    1. 本质上其实就是一个object对象;
    2. 虚拟dom上的属性比较少,真实dom属性多,因为虚拟dom只在recat内部使用,用不到那么多的属性
    3. 虚拟dom最终会被react转换成真实dom,呈现再页面上

JSX语法

  • 定义虚拟dom时不要用引号

  • 标签中引入js表达式要用{}

  • 如果在jsx要写行内样式需要使用style={{coler:red}}形式

  • 样式的类名指定不能写class,要写className;

  • 只有一个根标签

  • 标签必须闭合

  • 标签首字母

    ①若小写字母开头,则会将该标签转为html同名标签,如果没找到,则会报错;

    ②若大写字母开头,则会认为是组件,它就会去找对应的组件,如果没找到,就会报组件未定义的错误;

    (参考文章链接:blog.csdn.net/Ronychen/ar…

(写得不对望指正~)