当前位置:首页 > 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 用于缓存计算结果,避免在每次渲染时重复计算。只有当依赖项发生变化时,才会重新计算。

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 发生变化时,才会重新渲染。

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
分享给朋友:

相关文章

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 编写代码,同时生成 iOS 和 Android 应用,大幅减少开发成…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Rea…

react如何调试

react如何调试

调试 React 应用的方法 使用 React Developer Tools React Developer Tools 是 Chrome 和 Firefox 的浏览器扩展,可以检查组件树、状态和…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…