当前位置:首页 > React

react如何监听store里的变化

2026-01-25 17:37:16React

监听 Redux Store 变化的几种方法

使用 useSelector Hook(函数组件)
在函数组件中,通过 react-redux 提供的 useSelector Hook 可以订阅 Store 的状态变化。当指定的状态片段更新时,组件会自动重新渲染。

react如何监听store里的变化

import { useSelector } from 'react-redux';

function MyComponent() {
  const data = useSelector((state) => state.someReducer.data);
  return <div>{data}</div>;
}

使用 connect HOC(类组件)
对于类组件,可以通过 connect 高阶组件将 Store 的状态映射到组件的 props。当映射的状态变化时,组件会重新渲染。

react如何监听store里的变化

import { connect } from 'react-redux';

class MyComponent extends React.Component {
  render() {
    return <div>{this.props.data}</div>;
  }
}

const mapStateToProps = (state) => ({
  data: state.someReducer.data,
});

export default connect(mapStateToProps)(MyComponent);

手动订阅 Store(通用方法)
直接通过 Store 实例的 subscribe 方法监听变化,适用于非组件的逻辑或需要精细控制的场景。需注意手动取消订阅以避免内存泄漏。

import store from './store';

const unsubscribe = store.subscribe(() => {
  const currentState = store.getState();
  console.log('State updated:', currentState);
});

// 取消订阅
unsubscribe();

使用 Redux Toolkit 的 createListenerMiddleware
Redux Toolkit 提供监听中间件(Listener Middleware),可以监听特定 action 或状态变化,适合副作用逻辑。

import { createListenerMiddleware } from '@reduxjs/toolkit';

const listenerMiddleware = createListenerMiddleware();

listenerMiddleware.startListening({
  predicate: (action, currentState, previousState) => {
    return currentState.someReducer !== previousState.someReducer;
  },
  effect: (action, listenerApi) => {
    console.log('State changed:', listenerApi.getState());
  },
});

注意事项

  • 性能优化useSelector 默认使用严格相等(===)比较状态。若返回新对象(如 map/filter 结果),需使用浅比较或记忆化(memoization)避免不必要的渲染。
  • 订阅粒度:尽量缩小监听范围,避免监听整个 Store 导致性能下降。
  • 清理订阅:手动订阅时务必在组件卸载或适当时机调用取消订阅函数。

标签: reactstore
分享给朋友:

相关文章

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

react架构如何

react架构如何

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