当前位置:首页 > 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 或状态变化,适合副作用逻辑。

react如何监听store里的变化

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如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数组件…

react 如何设置 代理

react 如何设置 代理

在 React 中设置代理 在开发过程中,为了跨域请求后端 API,可以通过配置代理来解决。以下是几种常见的设置代理的方法: 使用 package.json 配置代理 在 package.json…

如何封装表单react

如何封装表单react

封装 React 表单的方法 封装 React 表单可以通过创建可复用的表单组件或自定义 Hook 来实现。以下是几种常见的方法: 使用受控组件封装表单 通过状态管理表单数据,将表单字段的值与 Re…

react如何清空state

react如何清空state

清空 React 组件的 state 在 React 中清空 state 可以通过多种方式实现,具体取决于组件的类型(类组件或函数组件)以及 state 的结构。 类组件中清空 state 在类组件…

react 如何传递props

react 如何传递props

传递 props 的基本方法 在 React 中,props 是从父组件向子组件传递数据的主要方式。通过在子组件的标签上添加属性,可以将数据传递给子组件。 父组件中传递 props: functi…