【问题标题】:Access Redux store in JavaScript function在 JavaScript 函数中访问 Redux 存储
【发布时间】:2017-10-12 03:40:09
【问题描述】:

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

如果没有,还有其他方法可以将 redux 状态连接到函数吗? (显然没有明确地将其作为参数传入)

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

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

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

感谢您的任何想法。

【问题讨论】:

  • 您可以使用redux thunk中间件并检查状态中的标志,即:isDataLoaded之类的。

标签: javascript reactjs redux react-redux


【解决方案1】:

connect() 带有 react-redux 包,它是 Redux 的 React 绑定。但是如果你想用普通的 JavaScript 与 Redux 状态交互,你不需要connect()react-redux。你可以直接与 Redux store 及其 API 交互。

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

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

我不太清楚你想要达到什么目标,但我希望这会有所帮助。

编辑:

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

store.js

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

const store = createStore(reducers)

export default store;

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

import store from "./store";

【讨论】:

  • 您好!谢谢你的评论。商店是否在全球范围内可用?或者我如何让它在特定的 JavaScript 文件中可用?谢谢!
  • 啊!这么幼稚的问题:store.getState() 与在 React 容器中使用 connect 连接 state 到 props 的值是否相同?
  • 是的,这与我们在 mapStateToProps(state) 中得到的值相同
  • 超级有帮助。在看到这个答案之前,我不确定该怎么做,即是否需要连接组件或使用中间件 (github.com/reactjs/react-redux/issues/…)。谢谢。
【解决方案2】:

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

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;
  }
}

【讨论】:

  • 感谢您的回答。问题是相同的操作将采用 id 参数并从 API 返回该特定 id 的数据。如果我已经请求了一个 id 的数据,我仍然想为另一个 id 触发该操作。这就是为什么我想检查数据是否已经处于具有特定参数的给定操作的状态。这有意义吗?
  • 好吧。您实际上可以使用其他变通方法访问应用程序状态。但通常使用中间件,而动作元是我更喜欢的。但无论如何检查这个stackoverflow.com/questions/38460949/…
  • 哦,太好了!我没有意识到有一个类似的问题。谢谢!
猜你喜欢
  • 2016-12-23
  • 2023-02-11
  • 1970-01-01
  • 2018-04-07
  • 2020-10-30
  • 2019-02-11
  • 1970-01-01
  • 2020-11-26
  • 2019-04-24
相关资源
最近更新 更多