Redux-logic提供了一种称为transform的方法,该方法允许在动作到达化简器之前对其进行转换。这对于各种情况很有帮助。通常,我想调度仅由用户输入的操作,有时我的化简器需要支持数据才能执行状态更新。
因此,我可以在redux-logic转换过程中做到这一点,但这似乎与typesafe-actions(我也在使用)冲突。我怎么能告诉打字稿我的动作在到达减速器之前就已经转变了?
想象一下,我使用{ userName: string }
之类的有效负载进行调度,但是我的转换过程添加了一个属性,所以我得到了{ userName: 'John Doe', recordId: 9 }
。
答案 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,这是我们需要使用的操作界面