【问题标题】:How do I pass a redux dispatch function into a smart component without using connect()?如何在不使用 connect() 的情况下将 redux 调度函数传递给智能组件?
【发布时间】:2017-05-13 12:44:28
【问题描述】:

我使用pepperoni-app-kit 作为起点,现在我想用jest 测试与react-redux 连接的智能组件。我的问题是调度函数,当使用 connect 连接时,它从我的被测模块中调用为 dispatch(action),但是当调用上一层(没有 connect)时,它总是被称为 dispatch(state, action)。

所以我可以在我的测试代码中使用这样的一行:

const [newState] = dispatch(initialState, Actions.update_timeAtProperty(0));

但现在我想像这样将调度函数传递给我的智能组件:

const tree = renderer.create(
  <BeaconView dispatch={dispatch} />
).toJSON();
expect(tree).toMatchSnapshot();

所以我的问题是我传递的调度函数需要状态和动作,但是在被测组件中(通常在 react-redux 中调用)调度只使用单个参数调用,动作。 connect() 函数告诉调度函数要使用我的状态存储的哪些部分,但我不知道在连接组件之外如何执行此操作。

【问题讨论】:

    标签: react-redux jestjs


    【解决方案1】:

    您可以尝试将dispatch 的第一个参数绑定到您的商店:

    <BeaconView dispatch={dispatch.bind(null, store)} />
    

    【讨论】:

    • 我想通了。看我的回答。
    【解决方案2】:

    我想我明白了。

    在pepperoni-app-kit 中提供了一个测试函数,仅供测试代码使用,它通过所有reducer 传递一个动作。它恰好被称为“调度”并接受两个参数(状态,动作),这意味着它实际上是一个减速器。

    在我的代码中(也源自pepperoni-app-kit),我正在使用只需要传递动作的调度函数调度动作,因为它已经知道它正在处理的存储并且存储知道状态。

    我没有尝试将 dispatch(state, action) 函数传递给我的组件(实际上是一个 reducer),而是自己导入了一个 redux 存储,现在将 store.dispatch 函数传递给被测单元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      相关资源
      最近更新 更多