React Hooks 完全指南

admin

2025-11-23 05:21 阅读 2341

深入理解React Hooks的使用方法和原理,从useState到自定义Hooks

React Hooks 完全指南

React Hooks 是 React 16.8 引入的新特性,让函数组件也能使用 state 和生命周期特性。

1. useState - 状态管理

import { useState } from "react"

function Counter() {
const [count, setCount] = useState(0)

return (


Count: {count}


<button onClick={() => setCount(count + 1)}>+1
<button onClick={() => setCount(prev => prev - 1)}>-1

)
}

2. useEffect - 副作用处理

import { useEffect } from "react"

function UserProfile({ userId }) {
const [user, setUser] = useState(null)

useEffect(() => {
// 获取数据
fetchUser(userId).then(setUser)

// 清理函数
return () => {
  console.log("cleanup")
}

}, [userId]) // 依赖数组
}

3. useContext - 跨组件通信

const ThemeContext = createContext("light")

function App() {
return (
<ThemeContext.Provider value=“dark”>
<Toolbar />
</ThemeContext.Provider>
)
}

function Button() {
const theme = useContext(ThemeContext)
return
}

4. useReducer - 复杂状态逻辑

const reducer = (state, action) => {
  switch (action.type) {
    case "increment": return { count: state.count + 1 }
    case "decrement": return { count: state.count - 1 }
    default: return state
  }
}

function Counter() {
const [state, dispatch] = useReducer(reducer, { count: 0 })
return (
<>
{state.count}
<button onClick={() => dispatch({ type: “increment” })}>+
</>
)
}

5. useMemo 与 useCallback

// 缓存计算结果
const expensiveValue = useMemo(() => {
  return computeExpensiveValue(a, b)
}, [a, b])

// 缓存回调函数
const handleClick = useCallback(() => {
doSomething(a, b)
}, [a, b])

6. 自定义 Hook

function useLocalStorage(key, initialValue) {
  const [value, setValue] = useState(() => {
    const item = localStorage.getItem(key)
    return item ? JSON.parse(item) : initialValue
  })

useEffect(() => {
localStorage.setItem(key, JSON.stringify(value))
}, [key, value])

return [value, setValue]
}

Hooks 使用规则

  • 只在函数组件顶层调用 Hooks
  • 不要在循环、条件或嵌套函数中调用
  • 自定义 Hook 名称以 use 开头
0 条评论