当前位置:首页 > React

react hooks如何用

2026-03-31 00:34:17React

React Hooks 的基本用法

React Hooks 是 React 16.8 引入的特性,允许在函数组件中使用状态和其他 React 特性。以下是常用 Hooks 的用法:

useState

用于在函数组件中添加局部状态。接受一个初始状态值,返回当前状态和一个更新状态的函数。

import React, { useState } from 'react';

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

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

useEffect

用于在函数组件中执行副作用操作(如数据获取、订阅或手动修改 DOM)。可以替代生命周期方法 componentDidMountcomponentDidUpdatecomponentWillUnmount

import React, { useState, useEffect } from 'react';

function Example() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []); // 空依赖数组表示只在组件挂载时执行
}

useContext

用于在函数组件中访问 React 的 Context,避免多级组件传递 props。

import React, { useContext } from 'react';
const ThemeContext = React.createContext('light');

function ThemedButton() {
  const theme = useContext(ThemeContext);
  return <button className={theme}>Click me</button>;
}

useReducer

用于管理复杂的状态逻辑,类似于 Redux 的 reducer 模式。

import React, { useReducer } from 'react';

const initialState = { count: 0 };

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      throw new Error();
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, initialState);
  return (
    <>
      Count: {state.count}
      <button onClick={() => dispatch({ type: 'increment' })}>+</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
    </>
  );
}

useRef

用于创建可变的 ref 对象,其 .current 属性被初始化为传入的参数。常用于访问 DOM 节点或保存可变值。

import React, { useRef } from 'react';

function TextInput() {
  const inputRef = useRef(null);

  const focusInput = () => {
    inputRef.current.focus();
  };

  return (
    <>
      <input ref={inputRef} type="text" />
      <button onClick={focusInput}>Focus Input</button>
    </>
  );
}

自定义 Hook

可以创建自定义 Hook 来复用状态逻辑。自定义 Hook 是一个函数,其名称以 "use" 开头,可以调用其他 Hook。

import { useState, useEffect } from 'react';

function useWindowWidth() {
  const [width, setWidth] = useState(window.innerWidth);

  useEffect(() => {
    const handleResize = () => setWidth(window.innerWidth);
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return width;
}

function MyComponent() {
  const width = useWindowWidth();
  return <div>Window width: {width}</div>;
}

Hooks 使用规则

只在 React 函数组件或自定义 Hook 中调用 Hooks。不要在循环、条件或嵌套函数中调用 Hooks。React 依赖 Hook 的调用顺序来正确保留状态。

性能优化

useMemo 用于记忆计算结果,避免每次渲染都重新计算。useCallback 用于记忆回调函数,避免子组件不必要的重新渲染。

react hooks如何用

import React, { useMemo, useCallback } from 'react';

function ExpensiveComponent({ list }) {
  const sortedList = useMemo(() => {
    return list.sort((a, b) => a - b);
  }, [list]);

  const handleClick = useCallback(() => {
    console.log('Item clicked');
  }, []);

  return (
    <ul>
      {sortedList.map(item => (
        <li key={item} onClick={handleClick}>{item}</li>
      ))}
    </ul>
  );
}

以上是 React Hooks 的基本用法和常见模式。Hooks 提供了一种更简洁和灵活的方式来编写 React 组件,使代码更易于理解和维护。

标签: 如何用react
分享给朋友:

相关文章

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…

react项目如何启动

react项目如何启动

启动React项目的步骤 确保已安装Node.js(建议版本12以上)和npm/yarn。可通过以下命令检查版本: node -v npm -v 全局安装create-react-app脚手架工具(…

react如何创建项目

react如何创建项目

使用 Create React App 创建项目 Create React App (CRA) 是官方推荐的 React 项目脚手架工具,适合快速初始化一个现代化的 React 项目。 安装 C…

如何部署react项目

如何部署react项目

部署 React 项目到生产环境 方法一:使用静态服务器部署(如 Nginx、Apache) 构建生产版本:运行 npm run build 或 yarn build,生成优化后的静态文件(位于 b…

react如何实现录音

react如何实现录音

使用React实现录音功能 在React中实现录音功能通常需要借助浏览器的MediaRecorder API。以下是实现步骤: 获取用户麦克风权限 需要请求用户授权访问麦克风设备,使用navigat…