当前位置:首页 > React

react如何监听store里的变化

2026-01-25 17:37:16React

监听 Redux Store 变化的几种方法

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

import { useSelector } from 'react-redux';

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

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

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 导致性能下降。
  • 清理订阅:手动订阅时务必在组件卸载或适当时机调用取消订阅函数。

react如何监听store里的变化

标签: reactstore
分享给朋友:

相关文章

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

react native 如何

react native 如何

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

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impo…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

react如何拓展

react如何拓展

React 拓展方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式,通过接收一个组件并返回一个新组件实现功能拓展。例如,为组件添加日志功能: function withLoggin…