无法在另一个 Action 中调用 Action

Cannot call Action within another Action

我无法理解这种行为

我有一个这样定义的action

import { whatever } from './kitty';

export const onDone = foo => dispatch => {
    whatever(foo);
    dispatch({
        type: ON_DONE,
    });
};

whatever()是这样定义的

export const whatever = foo => dispatch => {
    console.log('I DO NOT GET LOGGED');
    dispatch({
        type: DO_WHATEVER,
        payload: foo
    });
};

我希望whatever()被执行,但没有。这是为什么?

这里onDonewhatever不是“动作”,他们是“动作创造者”。它们是 return 一个动作的函数(在本例中为“thunk 动作”)。这里的动作是可以发送到 redux store 的东西。

他们是行动创造者意味着:如果你打电话给他们,你就会有一个行动,但这就像写一封信。你现在有一封信。在您实际使用它.

之前,它会一直在您的 table 上

你如何处理一个动作才能在 redux 中产生任何效果?您将它发送到商店。

因此您必须实际发送由您的 whatever 动作创建者创建的动作:

export const onDone = foo => dispatch => {
    dispatch(whatever(foo));
    dispatch({
        type: ON_DONE,
    });
};

PS:另一个答案建议调用 whatever(foo)(dispatch)。虽然 技术上 有效并且是 redux-thunk 中间件内部工作的一部分,但它不适合 redux 数据流模型并且不是库作者的预期使用方式.请不要这样做。