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

74 阅读3分钟

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

这是我参与【第四届青训营】笔记创作活动的第8天

一、React的历史与应用

React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在 2013 年 5 月开源了。

主要应用于三个方面:

  • 1.前端应用开发

    Facebook等网页版开发

  • 移动原生应用开发

    Instagram...

  • 结合Electron进行桌面应用开发

二、React的设计思路
UI编程痛点
  • 状态更新,UI不会自动更新,需要手动调DOM进行更新
  • 欠缺基本代码层面的封装和隔离,代码层面没有组件化
  • UI之间的数据依赖关系,需要手动维护,依赖链路长会遇到"Callback Hell"
响应式与转换式

image-20220809121120559

响应式系统

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

前端UI

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

响应式编程

  • 状态更新,UI更新
  • 前端代码组件化,可复用,可封装
  • 状态之间的互相依赖,只需声明即可
组件化
  • React的组件相对于Vue更加的灵活和多样,按照不同的方式可以分成很多类组件:

    • 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
    • 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
    • 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);

    主要是关注数据逻辑和UI展示的分离:

    • 函数组件、无状态组件、展示型组件主要关注UI的展示;

    • 类组件、有状态组件、容器型组件主要关注数据逻辑;

  • 组件是 组件的组合/原子组件

  • 组件内拥有状态,外部不可见

  • 父组件可将状态传入组件内部

    组件设计

    组件声明了状态和UI映射

    组件有Props/State两种状态

    “组件”可由其他组件拼装而成

生命周期

image-20220809122301071

三、React(hooks)的写法
import React,{ useState } from 'react';
function Example() {
    const [count,setCount] = useState(0);
    
    return (
      <div>
        <p>YOU clicked {count} times</p>
        <button onClick={() => setCount(count + 1)}>
            click me
        </button>
      </div>
    );
}
import React,{ useState } from 'react';
function Example() {
    const [count,setCount] = useState(0);
    
    useEffect(() => {
        document.title = `you clicked ${count} times`;
    })
    
    return (
      <div>
        <p>YOU clicked {count} times</p>
        <button onClick={() => setCount(count + 1)}>
            click me
        </button>
      </div>
    );
}
四、React的实现
Problems

JSX不符合JS标准语法

返回的JSX发生改变时,如何更新DOM

Virtual DOM(虚拟DOM): Virtual DOM是一种用于和真实DOM同步,而在JS内存中维护的一个对象,他具有和DOM类似的树状结构,并个DOM可有建立--对应的关系,它赋予了React声明式的API:您告诉React希望让UI是什么状态,React就确保DOM匹配该状态。这使您可有从属性操作,事件处理和手动DOM更新这些在构建应用程序时必要的操作中解放出来。

State/Props更新时,要重新触发render函数

五、小结

主要学习了一些React的基础知识,了解了React定义函数和组件化开发的方法,后续还需要继续学习。