当前位置:首页 > React

react实现页面局部刷新

2026-01-27 19:32:30React

使用 useState 和 useEffect 管理局部状态

在 React 中,可以通过 useState 定义需要刷新的局部状态,配合 useEffect 监听依赖项变化。当状态更新时,只有依赖该状态的组件会重新渲染。

import { useState, useEffect } from 'react';

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

  useEffect(() => {
    fetchData();
  }, []); // 空数组表示仅在组件挂载时执行

  const fetchData = async () => {
    const response = await fetch('api/data');
    const result = await response.json();
    setData(result); // 更新局部状态触发重新渲染
  };

  return (
    <div>
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
      <button onClick={fetchData}>刷新数据</button>
    </div>
  );
}

通过条件渲染控制显示区域

利用条件渲染(如 && 或三元表达式)可以精确控制需要刷新的部分。结合状态管理,仅重新渲染符合条件的组件片段。

react实现页面局部刷新

function ConditionalRefresh() {
  const [showDetails, setShowDetails] = useState(false);

  return (
    <div>
      <button onClick={() => setShowDetails(!showDetails)}>
        {showDetails ? '隐藏详情' : '显示详情'}
      </button>
      {showDetails && <DetailComponent />}
    </div>
  );
}

使用 React.memo 优化性能

对于子组件,通过 React.memo 进行记忆化处理,避免父组件状态更新时不必要的重新渲染。只有当 props 变化时才会触发更新。

const MemoizedComponent = React.memo(function Child({ data }) {
  return <div>{data}</div>;
});

function Parent() {
  const [count, setCount] = useState(0);
  const [text, setText] = useState('');

  return (
    <div>
      <button onClick={() => setCount(count + 1)}>计数: {count}</button>
      <input value={text} onChange={(e) => setText(e.target.value)} />
      <MemoizedComponent data={text} /> {/* 仅当text变化时重新渲染 */}
    </div>
  );
}

结合 Context API 实现跨组件更新

通过 Context 提供局部状态共享,消费者组件(Consumer)在 Context 值变化时会自动更新,无需透传 props。

react实现页面局部刷新

const RefreshContext = createContext();

function App() {
  const [value, setValue] = useState('初始值');

  return (
    <RefreshContext.Provider value={{ value, setValue }}>
      <ChildComponent />
    </RefreshContext.Provider>
  );
}

function ChildComponent() {
  const { value, setValue } = useContext(RefreshContext);

  return (
    <div>
      <span>{value}</span>
      <button onClick={() => setValue('新值')}>更新</button>
    </div>
  );
}

使用 useReducer 处理复杂状态逻辑

对于多状态关联的场景,useReducer 可以集中管理状态变更逻辑,通过 dispatch 触发局部更新。

function reducer(state, action) {
  switch (action.type) {
    case 'update':
      return { ...state, data: action.payload };
    default:
      return state;
  }
}

function ReducerDemo() {
  const [state, dispatch] = useReducer(reducer, { data: null });

  const handleUpdate = () => {
    fetch('api/data').then(res => res.json())
      .then(data => dispatch({ type: 'update', payload: data }));
  };

  return (
    <div>
      <div>{state.data}</div>
      <button onClick={handleUpdate}>获取数据</button>
    </div>
  );
}

通过 key 属性强制重置组件

为组件设置唯一的 key 属性,当 key 值变化时 React 会销毁旧组件并重新挂载新实例,实现强制刷新效果。

function KeyRefresh() {
  const [refreshKey, setRefreshKey] = useState(0);

  return (
    <div>
      <ExpensiveComponent key={refreshKey} />
      <button onClick={() => setRefreshKey(prev => prev + 1)}>
        强制刷新组件
      </button>
    </div>
  );
}

标签: 局部页面
分享给朋友:

相关文章

vue页面实现

vue页面实现

Vue 页面实现方法 创建 Vue 组件 使用 Vue 单文件组件(SFC)方式创建页面,文件扩展名为 .vue。一个基本的 Vue 组件包含三个部分:模板(template)、脚本(script)和…

vue实现页面跳转

vue实现页面跳转

vue实现页面跳转的方法 在Vue中实现页面跳转主要有以下几种方式: 使用router-link组件 router-link是Vue Router提供的组件,用于声明式导航: <router…

vue页面分离的实现

vue页面分离的实现

Vue 页面分离的实现方法 组件化开发 Vue 的核心思想之一是组件化,通过将页面拆分为多个可复用的组件实现分离。每个组件包含独立的模板、逻辑和样式,通过 props 和 events 进行通信。…

vue实现两个登录页面

vue实现两个登录页面

实现多个登录页面的方法 在Vue项目中实现两个不同的登录页面,可以通过路由配置和组件分离的方式完成。以下是具体实现方法: 配置路由文件 在router/index.js中定义两个独立的路由,分别…

js实现页面跳转

js实现页面跳转

使用 window.location.href 通过修改 window.location.href 属性实现页面跳转: window.location.href = 'https://exampl…

vue实现 页面

vue实现 页面

Vue 实现页面的基本方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现页面的常见方法: 单文件组件(SFC) 使用 .vue 文件组织页面结构,包含模板、脚…