React-Hooks笔记

class组件存在的问题和添加Hooks的原因

一、函数组件的特点

  • 没有组件实例
  • 没有生命周期
  • 没有state和setState,只能接收props

二、class组件的问题

  • 大型组件很难拆分和重构,很难测试(即class不易拆分)
  • 相同业务逻辑,分散到各个方法中,逻辑混乱
  • 复用逻辑变得复杂,如:Mixins,HOC,Render Prop

三、React组件更易用函数表达

  • React提倡函数式编程
  • 函数更灵活,更易拆分,更易测试
  • 但是函数组件太简单,需要增强能力-----Hooks

Hooks的具体讲解

1、State Hook

注意:让函数组件实现state和setState

  • 默认函数组件没有state
  • 函数组件是一个纯函数,执行完即销毁,无法存储state
  • 需要State Hook ,即把state功能 "钩" 到纯函数中

1、函数组件:

javascript 复制代码
import React from 'react'
import { useState } from 'react';

function ClickCount() {
    const [count, setCount] = useState(0);
    return (
        <div>
            <p>你点击了{count}次</p>
            <button onClick={() => setCount(count + 1)}>点击</button>
        </div>
    )
}

export default ClickCount;

2、class组件:

javascript 复制代码
import React from 'react'

class ClickCountClass extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            count: 0
        }
        this.handleClick = this.handleClick.bind(this);
    }
    render() {
        return <div>
            <p>你点击了{this.state.count}次</p>
            <button onClick={this.handleClick}>点击</button>
        </div>
    }
    handleClick() {
        this.setState({
            count: this.state.count + 1
        })
    }
}

export default ClickCountClass;

3、useState使用总结

  • useState(0)传入初始值,返回数组state,setSate
  • 通过state获取值
  • 通过setState(1)修改值

4、Hooks命名规范

规定所有Hooks都用use开头,如:useXXX

自定义Hooks也要用use开头

非Hooks的地方,尽量不要用useXXX写法

相关推荐
康小汪7 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
zhangrelay8 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
Jimmy8 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
白山编程大哥9 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
志尊宝10 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
Flynt10 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
lll235269177911 小时前
线下多人发言对比与录音操作
笔记·智能手机
Csvn11 小时前
bundle优化
前端
北冥有鱼11 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js