当前位置: 首页 > news >正文

React学习笔记(一)

组件化思想

组件

组件是构建 React 应用的独立、可复用的代码块。它接收输入(称为 props),并返回描述UIReact 元素。

函数组件 vs 类组件
  • 函数组件:一个接受输入,并输出JSX的函数。
  • 类组件:使用class定义,并继承React.Component的类,必须包含一个render()方法。
为什么函数组件成为主流

1、代码简洁:函数组件的语法更简单,没有this绑定问题。

2、Hooks的引入:引入Hooks后,函数组件也能拥有状态和生命周期等能力。

受控组件 vs 非受控组件
  • 受控组件:表单数据由React组件管理的组件。表单元素(inputtextarea等)的值由state控制,并通过onChange事件来更新。
  • 非受控组件:表单数据由DOM本身进行管理,可以使用ref从DOM节点中获取表单值。

状态和属性

state(状态)

  • 组件内部管理的数据,状态改变会触发组件的重新渲染。
  • 如何更新:
    • 类组件:使用this.setState()
    • 函数组件:使用useState Hook 返回更新函数
    • 状态的更新是异步的,React会对同一个事件处理函数中的多个状态更新进行批处理
    • 状态不可变,每次状态更新都会产生新的状态对象,直接修改状态不会重渲染

props(属性)

  • 从组件外部传入的数据,类似函数的参数,只读,不能修改。
  • 实现父组件向子组件通信(传递数据、回调函数等)

Hooks

1、useState
  • 作用:在函数组件中添加内部状态
  • 语法:const [state,setState] = useState(初始值)
  • 关键点:初始值可以是一个值,也可以是一个函数。调用setState会替换状态对象
2、useEffect
  • 作用:在函数组件中执行副作用操作(数据获取,订阅,手动修改DOM等一些异步操作)
  • 执行时机:默认情况下,在每次渲染后(包括首次渲染)都会执行。
  • 依赖数组(第二个参数)的控制:
    • 不提供依赖数组(null):每次渲染后都执行
    • 依赖数组为空([]):仅在组件挂载后执行一次(类似于componentDidMount
    • 依赖数组有值([dep1,dep2]):在组件挂载后以及dep1dep2发生改变时执行
  • 清除效应:如果useEffect的回调函数返回一个函数,这个函数会在组件卸载前和执行下一个副作用之前被调用,可以用于清理(取消订阅、清除定时器等)
3、useContext
  • 作用:接受一个Context对象(由React.createContext()创建)并返回该Context的当前值
  • 实现与后代组件单向通信
4、useCallbackuseMemo
  • useCallback:缓存函数本身,用于优化性能。
    • 在进行重新渲染时,
      • 如果依赖项没有发生变化,返回的是相同的函数,从而跳过重新渲染。
      • 当依赖项改变时,会更新函数,并重新渲染。
  • useMemo:缓存计算结果,用于优化性能
    • 避免每次重新渲染时都进行高开销的计算任务
    • 仅在依赖项改变时重新计算。

JS中每次运行function(){}()=>{}都会生成新的函数对象。

父组件中定义了一个回调函数,子组件中调用了这个函数。当父组件状态改变时,会重渲染父组件,父组件中子组件也会重渲染,其中父组件重新生成了一个新的函数对象(虽然它的功能不变,但函数的引用变了,是一个新的对象),传入子组件的回调函数变了,所以子组件也要重新生成。

如果使用useCallback缓存该回调函数,只要依赖数组中的元素不变,当父组件重渲染时,它会返回缓存好的函数对象,而不是生成一个新的函数对象,传入子组件的回调函数不变,子组件跳过重新渲染。

5、useRef
  • 访问DOM元素
  • 存储一个可变的值
    • ref的current属性可以在组件的整个生命周期内持久存在,而且改变它不会触发组件重新渲染,可以用来存储定时器ID,上一次属性或状态等。

生命周期和Hooks

  • componentDidMount:组件挂载后回调

    • 使用 useEffect 并提供一个空依赖数组 []
  • componentDidUpdate:组件状态更新时回调

    • 使用 useEffect不提供依赖数组或提供一个非空的依赖数组
      • 使用 useRef 来保存一个在组件生命周期内持久存在的值(isMounted),它不会触发重渲染。
      • 首次渲染时,isMounted.currentfalse,将其设为 true 但不执行更新逻辑。
      • 后续渲染时,isMounted.currenttrue,执行更新逻辑。
  • componentWillUnmount :组件卸载之前回调

    • useEffect返回一个清理函数并提供一个空依赖数组

虚拟DOM

一个轻量级的Javascript对象,是真实DOM的抽象,当组件状态改变时,React会先在虚拟DOM上进行比较计算,而不是直接操作DOM。

  • 工作流程:

    1. 当状态改变时,会创建一个新的虚拟DOM树。
    2. 使用Diffing算法比较新旧两个虚拟DOM树,找出需要更新的最小部分
    3. 将计算出来的差异批量地应用到真实DOM上
  • 减少对真实DOM树的操作,极大提高性能。开发者无需关心如何高效地更新UI,只需要关心数据状态。

http://www.hskmm.com/?act=detail&tid=20175

相关文章:

  • Day23static详解
  • 11.prometheus监控之黑盒(blackbox)监控
  • Python虚拟环境及创建和使用虚拟环境(Python3)
  • 团队协作必备:16款在线协同编辑文档方案对比
  • 变电站、开闭所、环网柜、配电站
  • 为AI注入灵魂:一种面向人机黑箱的元人文治理新范
  • clickhouse
  • 2025.9.28——1黄
  • 聚焦 AI 应用基础设施,云栖大会 Serverless AI 全回顾
  • 删除 Ubuntu Nautilus 资源管理器侧栏的默认目录
  • 完整教程:整合与超越:论“开源AI智能名片链动2+1模式S2B2C商城小程序”对传统红人直播带货模式的升维
  • 2025 最新隔音板厂家权威推荐排行榜:聚焦实力厂商,阻尼 / 聚酯纤维等全品类适配与标杆案例解析室外/KTV/隔音板安装/沈阳/ 厂房隔音板厂家推荐
  • 2025 年医疗器械注册咨询公司最新权威推荐排行榜:TOP 级服务商全流程能力解析,助力企业高效合规拿证医疗器械注册咨询//二类医疗器械注册咨询/三类医疗器械注册咨询公司推荐
  • git合并最近的多个提交
  • Altium Designer 25.8.1 最新版安装指南
  • 2025 年最新推荐地坪源头厂商权威排行榜:聚焦环氧 / 聚氨酯 / 固化剂等多类型地坪,精选 TOP5 优质企业水性聚氨酯/环氧/密封固化剂地坪施工厂商推荐
  • 杂题笔记
  • HyperWorks许可证服务器配置
  • Why Startups and Enterprises Are Betting Big on React for Frontend Development?
  • Redis HASH+RediSearch 设计自定义索引
  • 算法篇
  • 数据结构篇
  • 2025 年二氧化氯发生器厂家最新权威推荐排行榜:TOP 级企业技术实力与成本优势解析,助力用户精准选购电解法二氧化氯发生器/电解食盐二氧化氯发生器厂家推荐
  • 如何找到当前计算机所有的UnrealEngine安装位置
  • 阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
  • 配电网一次设备
  • winform 烦人的键盘事件 再遇上 chart 上下左右 失灵
  • 2025 年铝板品牌最新权威推荐排行榜:1-7 系主流铝板企业 TOP5 精选及工艺品质测评指南1060/1100/3003/3004/5052/6061/6063/6082铝板厂家推荐
  • 一只手都数的过来
  • 2025 年次氯酸钠发生器厂家最新权威推荐排行榜:聚焦专利技术与成本优势,助力水厂 / 污水处理厂精准选型