在 JavaScript 函数中访问 Redux 存储

IT技术 javascript reactjs redux react-redux
2021-05-22 18:05:08

是否可以将 redux 状态映射到常规 javascript 函数而不是 React 组件?

如果没有,是否有另一种方法将 redux 状态连接到函数?(显然没有明确地将它作为参数传入)

我尝试连接到一个函数,但它中断了(我没有确切的错误消息。服务器只是遇到了 uncaughtException)。由于 React 组件可以是纯函数,是否connect()只能与 a class ComponentName extends Component(等)一起使用?

我想做这样的事情的原因:

我有一个 redux 动作生成器,如果它发现动作的结果已经处于 redux 状态,我希望生成器跳过执行 API 调用,但我不想为每个单独的 api 调用从每个容器中明确检查状态. 这有意义吗?

感谢您的任何想法。

2个回答

connect()附带react-redux包,它是 Redux 的 React 绑定。但是,如果你想用平常的JavaScript Redux的状态互动,你不需要任何connect()react-redux为。您可以store通过其API直接与 Redux 交互

例如,如果您想监听动作,您可以使用subscribe()如下getState()方法并使用方法访问state.

let unsubscribe = store.subscribe(function(){
  const state = store.getState();
})

我不太清楚您要实现的目标,但我希望这会有所帮助。

编辑:

您可以在一个文件中创建您的商店并将其导出。

商店.js

import { createStore } from 'redux'
import reducers from "./reducers";

const store = createStore(reducers)

export default store;

现在您可以从任何其他文件导入 store 并使用它。

import store from "./store";

假设你有一个动作。只需添加一些标记 - 并且减速器将检测是否跳过该标记:

Action:
{
  type: 'SOMETYPE',
  paylod: data,
  shouldSkip: true
}

Reducer:
export default function ( state = {}, action ) {
  if(action.shouldSkip)
    return state
  switch ( action.type ) {
    case "OTHER_TYPE":
      return action.payload;
    default:
      return state;
  }
}