目前我的代码有效,但仅适用于在combine reducer函数中专门指定的表单。但是,我希望我的代码通常适用于我的单页应用程序中加载的所有表单。
以下是相关代码:
import { reducer as formReducer } from 'redux-form';
export default combineReducers({
someReducer,
anotherReducer,
form: formReducer.plugin({
specificFormId: (state, action) => { // <-- I don't want this only for specificFormId, I want this to happen for all my forms,
// or at least have a dynamic way of adding more forms
const {type, payload} = action;
switch(type) {
case 'RESET_LINK_TYPE_FIELDS': {
return {
...state,
registeredFields: {
...state.registeredFields,
// Do some custom restting here based on payload
}
};
}
default:
return state;
}
}
})
});
因此,只要我的<Field ..of a certain type/>
触发了RESET_LINK_TYPE_FIELDS操作,我就会想要正确的表单来回复它。
在动作有效负载中,我可以具体使用表单标识符或其他任何我需要的功能。
事实上,如果.plugin允许我自己进行表单状态切片,我可以很容易地做到这一点,但是因为它迫使我传递一个对象,使用硬编码的表单标识符它不起作用。
有没有办法让插件给我WHOLE表单状态,然后我会根据需要进行切片,并根据负载返回状态?
答案 0 :(得分:2)
目前无法使用现有API执行此操作。
你可以通过将redux-form
减速器包装在你自己的东西中来判断一个解决方案。
export default combineReducers({
someReducer,
anotherReducer,
form: resetHack(formReducer)
})
function resetHack(formReducer) {
return (state, action) => {
if(action.RESET_LINK_TYPE_FIELDS) {
// manipulate slice somehow
} else {
return formReducer(state, action)
}
}
}