React Hooks

React Hooks

basic hooks
  • useState
  • useEffect
  • useContext
useState

useState接收一个参数,返回的是一个数组,参数表示初始值,数组的第1项就是定义的变量,第2项就是改变变量的方法。

参数可以是基本数据类型,如string、number,也可以是复合数据类型,如array,object等,

useEffect

在一个组件的声明周期函数里可以做很多事情, React 在 Hooks 出现之前会用

  • componentWillMount 组件即将挂载
  • componentDidMount 组件完成挂载
  • componentDidUpdate 组件完成更新
  • componentWillUnmount 组件即将销毁

等的一些生命周期函数

在 Hooks 出现之后, 就可以用 useEffect 函数来代替一些生命周期函数

react 复制代码
  useEffect(() => {
    console.log('我到User页面了')
    return () => {
      console.log('我走了, User页面')
    }
  })

在未传入第二个参数时,每次state修改会触发绑定解绑 我来了和我走了事件

它是一个数组,数组中可以写入很多状态对应的变量, 意思是当状态值发生变化时,我们才进行解绑。但是当传空数组[]时,就是当组件将被销毁时才进行解绑,这也就实现了componentWillUnmount的生命周期函数

useEffect 实现生命周期的三种方式:

  • 作为 componentDidMount 使用, [] 作为第二个参数
  • 作为 componentDidUpdate 使用, 可指定依赖
  • 作为 componentWillUnmount 使用, 通过 return
  • 三种状态可同时存在

如果出现了多个 useEffect, 那么会按顺序执行

useContext 和 useReducer 实现 Redux
react 复制代码
import { createContext, useContext, useState } from "react"
//新增
const CountContext = createContext()
const Counter = () => {
  const count = useContext(CountContext)
  return (<h2>{count}</h2>)
}
const ContextHooks = () => {
  const [count, setCount] = useState(0)
  return (
    <div>
      <p>{count}</p>
      <button onClick={() => { setCount(count + 1) }}>+1</button>
      <CountContext.Provider value={count}>
        <Counter></Counter>
      </CountContext.Provider>
    </div>
  )
}
export default ContextHooks

count变量允许跨层级实现传递和使用了, 在父组件 count 变化的时候子组件 Counter 也可以接收到了

和props进行传递参数的区别

useContext可以爷孙组件传递,只有一层当然props方便

useReducer

useReducer 和 Redux 的 Reducer 类似, 参数是一个回调函数, 分别接收 state(数据), 和 action(对数据进行某种操作的描述)

react 复制代码
import { useReducer } from 'react'
const UseReducer = () => {
  const [count, dispatch] = useReducer((state, action) => {
    switch (action) {
      case 'add':
        return state + 1
      case 'sub':
        return state - 1
      default:
        return state
    }
  }, 0)
  return (
    <>
      <div>
        <p>{count}</p>
        <button onClick={() => dispatch('add')}>+1</button>
        <button onClick={() => dispatch('sub')}>-1</button>
      </div>
    </>
  )
}
export default UseReducer 
相关推荐
小兵张健1 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_1 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪1 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰3 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒3 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice4 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄4 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队5 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰5 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans5 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端