如何使typesafe-actions与redux-logic转换一起工作?

时间:2019-04-26 21:32:48

标签: reactjs typescript redux redux-logic typesafe-actions

Redux-logic提供了一种称为transform的方法,该方法允许在动作到达化简器之前对其进行转换。这对于各种情况很有帮助。通常,我想调度仅由用户输入的操作,有时我的化简器需要支持数据才能执行状态更新。

因此,我可以在redux-logic转换过程中做到这一点,但这似乎与typesafe-actions(我也在使用)冲突。我怎么能告诉打字稿我的动作在到达减速器之前就已经转变了?

想象一下,我使用{ userName: string }之类的有效负载进行调度,但是我的转换过程添加了一个属性,所以我得到了{ userName: 'John Doe', recordId: 9 }

2 个答案:

答案 0 :(得分:0)

我是打字稿新手,但意识到我知道如何解决这个问题。

在reducer中,我们通常导入动作类型,如下所示:

[^"0123456789]

因此,要对其进行更新以接受由Redux逻辑中间件修改的操作,我们必须告诉Typescript类型已扩展。它是这样的:

// actions.ts
import { action } from 'typesafe-actions';
import actionTypes from './actionTypes';

export const someAction = (data) = action(
  actionTypes.SOME_ACTION_TYPE,
  { data },
);

// reducer.ts
import { ActionType } from 'typesafe-actions';
import { StateSlice } from './types';
import * as actions from './actions';

const initialState: StateSlice = { ... };

const reducer = (state = initialState, action: ActionType<typeof actions>): StateSlice => {
  ...
};

这是我能够使用的真实代码的缩写版本。希望这对某人有所帮助。

答案 1 :(得分:0)

有一个关于标准动作类型的软件包 https://github.com/redux-utilities/flux-standard-action

和redux-logic提供https://github.com/jeffbski/redux-logic/blob/master/definitions/action.d.ts,这是我们需要使用的操作界面