当前位置:首页 > React

react如何记忆

2026-02-11 11:31:21React

记忆状态(useState 和 useRef)

在 React 中,useState 用于存储和更新组件的状态。每次状态更新都会触发组件的重新渲染。useRef 则用于存储可变值,但不会触发重新渲染,适合存储不需要触发 UI 更新的数据。

import { useState, useRef } from 'react';

function Counter() {
  const [count, setCount] = useState(0); // 触发重新渲染
  const countRef = useRef(0); // 不触发重新渲染

  const increment = () => {
    setCount(count + 1);
    countRef.current += 1;
  };

  return (
    <div>
      <p>State Count: {count}</p>
      <p>Ref Count: {countRef.current}</p>
      <button onClick={increment}>Increment</button>
    </div>
  );
}

记忆计算结果(useMemo)

useMemo 用于缓存计算结果,避免在每次渲染时重复计算。只有当依赖项发生变化时,才会重新计算。

react如何记忆

import { useMemo } from 'react';

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

  return <div>{sortedList.join(', ')}</div>;
}

记忆函数(useCallback)

useCallback 用于缓存函数,避免在每次渲染时重新创建函数。只有当依赖项发生变化时,才会重新创建函数。

import { useCallback } from 'react';

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

  return <ChildComponent onClick={handleClick} />;
}

function ChildComponent({ onClick }) {
  return <button onClick={onClick}>Click Me</button>;
}

记忆组件(React.memo)

React.memo 是一个高阶组件,用于缓存组件的渲染结果。只有当组件的 props 发生变化时,才会重新渲染。

react如何记忆

import { memo } from 'react';

const MemoizedComponent = memo(function MyComponent({ text }) {
  return <div>{text}</div>;
});

function ParentComponent() {
  return <MemoizedComponent text="Hello" />;
}

记忆表单输入(受控组件)

受控组件通过将表单输入的值存储在状态中,实现记忆功能。每次输入变化时更新状态,从而保持输入值的记忆。

import { useState } from 'react';

function Form() {
  const [inputValue, setInputValue] = useState('');

  const handleChange = (e) => {
    setInputValue(e.target.value);
  };

  return (
    <form>
      <input type="text" value={inputValue} onChange={handleChange} />
    </form>
  );
}

记忆滚动位置(useEffect 和 useRef)

通过 useEffectuseRef 可以记忆滚动位置,并在组件重新渲染时恢复滚动位置。

import { useEffect, useRef } from 'react';

function ScrollComponent() {
  const scrollRef = useRef(null);

  useEffect(() => {
    const savedPosition = localStorage.getItem('scrollPosition');
    if (savedPosition && scrollRef.current) {
      scrollRef.current.scrollTop = savedPosition;
    }

    return () => {
      if (scrollRef.current) {
        localStorage.setItem('scrollPosition', scrollRef.current.scrollTop);
      }
    };
  }, []);

  return (
    <div ref={scrollRef} style={{ height: '200px', overflow: 'auto' }}>
      {/* 长列表内容 */}
    </div>
  );
}

标签: 记忆react
分享给朋友:

相关文章

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

如何清洁react

如何清洁react

清洁 React 项目的方法 删除未使用的依赖项 运行 npm ls 或 yarn list 检查已安装的依赖项,使用 npm uninstall <package> 或 yarn rem…

vscode如何配置react

vscode如何配置react

配置 VSCode 进行 React 开发 安装必要插件 ES7+ React/Redux/React-Native snippets:提供 React 代码片段快速生成功能。 Prettier -…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

react less如何配置

react less如何配置

在 React 项目中配置 Less 安装必要的依赖包,确保项目支持 Less 预处理样式。使用以下命令安装 less 和 less-loader: npm install less less-lo…