【发布时间】:2021-10-28 12:47:19
【问题描述】:
我正在从使用普通 redux 过渡到使用 redux 工具包,但我遇到了以下无法过渡的场景:
简单的 Redux:
const openEntityScreen = (payload: any) => {
var { module, entity, operation } = payload;
return {
type: `entityScreen/${module}/${entity}/${operation}/open`
}
}
然后我有一个reducer creator..
export default function (module, entity, operation, initialState) {
return (state, action) => {
switch (action.type) {
case `entityScreen/${module}/${entity}/${operation}/open`: {
...
return {
...state,
...
}
default: return state
}
}
}
我注册的是这样的:
var someEntityScreenReducer = createEntityScreenReducer(
'someModuleName',
'someEntityName',
'someOperationName',
someState
);
然后将这个reducer分配给负责'someModuleName'、'someEntityName'等的状态部分。
基本上这样我就可以为不同的模块和实体等快速创建多个减速器。
因此,当尝试使用 redux 工具包转换此逻辑时,存在 2 个主要问题:
1.我无法使用动作的有效负载动态构建动作的类型。
当使用 createAction 方法(例如 createAction('counter/increment'))时,我们需要显式传递类型,即使我们使用负载准备回调,我们仍然无法动态构建操作的类型。
2。无法创建减速器案例/操作。动态
在上面的示例中,我们使用传递的 reducer 创建者参数构建案例。我无法使用 createReducer 函数来实现这一点,因为我们使用预构建操作来映射或使用构建器创建案例,我也无法使用 createSlice 实现这一点,因为那里的案例/操作是自动创建而不是动态创建。
【问题讨论】:
标签: reactjs redux react-redux redux-toolkit