有没有一种众所周知的模式,可以将动态初始状态的有效负载注入Redux-Toolkit的initialState对象?
也就是说,我想这样做-
import initialState from './initialState';
function generateSlice(payload = {}){
const postsSlice = createSlice({
name: 'posts',
initialState: {...initialState, ...payload}, /// inject data here
reducers: {...}
})
}例如,除非在带有data {availableRooms: [{...}]}的初始化上注入,否则{availableRooms: []}是一个空数组
此模式不起作用,但是,b/c我想导出可分派的操作,如下所示-
const postsSlice = createSlice({
name: 'posts',
initialState: {...initialState, ...payload},
reducers: {...}
})
export {actionName} from postsSlice.actions;
*****
import {actionName} from '../mySlice'
...
const dispatch = useDispatch();
dispatch(actionName('exampleVal'));
...我受到airbnb linting规则的约束,所以我不能在let上导出-
let actions; ///Bad
function generateSlice(payload){
const postsSlice = createSlice({
name: 'posts',
initialState: {...initialState, ...payload},
reducers: {...}
})
actions = postsSlict.actions
}
export actions;我所追求的功能在没有使用createSlice的情况下会更容易一些。我提出这个问题的原因是,我在很多地方看到推荐使用createSlice而不是createAction + createReducer,但我没有看到任何简单的方法来引入我正在寻找的动态数据。
我对redux-orm一无所知,但我认为我所追求的功能与this SO question类似
发布于 2020-12-03 02:06:08
这是我目前的解决方案,它完全跳过了createSlice。
在根渲染中
...
const store = initStore(data);
<Provider store={store}>
<App />
</Provider>和init函数(为简洁起见进行了删减)
import {
configureStore,
getDefaultMiddleware,
combineReducers,
} from '@reduxjs/toolkit';
import reservationReducer from '@reservation/reducer';
import spaceHierarchyReducer from '@map/reducer';
import appStoreReducer from '@app/reducer';
let ReduxStore;
function initStore(
ssrState: Partial<RootStore> = {},
) {
if (ReduxStore) {
return ReduxStore;
}
const slices = {
reservation: reservationReducer,
spaceHierarchy: spaceHierarchyReducer,
appStore: appStoreReducer,
};
const reducer = combineReducers(slices);
const preloadedState = getInitialState(ssrState);
const store = configureStore({
reducer,
middleware,
preloadedState,
});
ReduxStore = store;
initDispatch(store);
return store;
}在getInitialState中,我解析URL并根据业务需求设置存储,这是服务器端数据+url可注入参数的混合。然后,在initDispatch中,我为一些基于注入的初始状态的初始化逻辑调用store.dispatch()。
在这里,Typescript的使用非常有用,因为它强制执行从getInitialState返回的数据的形状以及reducers的形状。
https://stackoverflow.com/questions/60999058
复制相似问题