【问题标题】:Alternative to Redux reducerRedux reducer 的替代品
【发布时间】:2018-11-17 17:47:45
【问题描述】:

我正在构建一个其他应用程序将使用的库。我的库是 redux 的扩展。

为了使这个问题尽可能笼统,我目前有中间件、动作创建者和一个减速器。

reducer 是个问题,因为我的 reducer 依赖于状态结构,作为库开发人员,我不能也不应该知道。用户可以使用 combineReducers 函数或其他函数,并为我的减速器状态指定他想要的任何名称。

我的问题是——在这种情况下,Redux.js 库为库开发人员提供了哪些选项;隐藏减速器/减速器的其他替代品?

【问题讨论】:

  • 你的图书馆是做什么的?组件是否需要你的 reducer 产生的状态,还是只是中间件?
  • 目前,我认为我的消费者没有理由使用我的减速器产生的状态。但是,他们会在他们的 reducer 中使用我分派给我的 reducer 的操作。
  • 目前我无法详细说明我的图书馆将做什么。我对开发库没有经验,因此我可能无法提供您需要的信息来帮助我。请告诉我是否有任何一般性可以告诉我。
  • 为什么需要 state 和 reducer?
  • 用户在他创建他的 redux-store 之前给了我要执行的函数,我需要跟踪我执行了哪个函数,以什么顺序,取消,失败,接下来要调用什么函数,何时以及等等......这只是我所做的一小部分。

标签: javascript redux


【解决方案1】:

将你的库包装在一个配置函数中,这需要用户提供一个selector,它指向你的reducer所处的状态。

此外,如果用户访问您的状态(现在不是您的情况),您可以提供选择器来使用该状态,而无需知道它的结构。

一个一般的非工作示例:

const createSelectors = (mainSelector) => ({
  selectorA: (state) => mainSelector(state).dataA,
  selectorB: (state) => mainSelector(state).dataB,
});

const createMiddlewares = (actionTypes, selectors) => {
  const middlewareA = ({ getState, dispatch }) => 
    next => action => {
      const myStateA = selectors.selectorA(getState());
    };

  return {
      middlewareA
  };
};

const factory = (mainSelector = ({ myState }) => myState) => {
  const actionTypes = {};
  const actions = {};
  const reducer = () => {};
  const selectors = createSelectors(mainSelector);
  const middleware = createMiddlewares(actionTypes, selectors);

  return {
    actionTypes,
    actions,
    reducer,
    middleware,
    selectors
  };
};

【讨论】:

  • 非常好。这可能是保留减速器的唯一解决方案。我会等待听到更多的答案,直到接受你的。希望不会以任何方式涉及用户。无论如何,谢谢,真的很好:)
  • 我确定这不是唯一的方法。您还可以通过单例配置选择器,让用户将减速器放置在您选择的位置,或者跳过减速器状态,并在中间件中管理内部状态。
  • 我想到了你的最后一个选项,这很好,但是如果用户使用存储增强器来保存它的状态,比如github.com/elgerlambert/redux-localstorage,他也不会保存我的内部状态。
  • 如果你的 state 应该是 redux 生态系统的一部分,你需要一个 reducer。
【解决方案2】:

这个包最大限度地减少了编写 reducer 的需求,因为它使用了带有动作的自动合并功能。数组也有一些解决方案。 https://www.npmjs.com/package/micro-reducers

【讨论】:

    【解决方案3】:

    我认为与其为复杂的 Redux 库而苦苦挣扎。您应该尝试使用 https://rootzjs.org/ 作为 redux 的替代品。它简直就像小菜一碟。

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2018-06-13
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多