gpt4 book ai didi

reactjs - 在 Redux Toolkit 中使用 createSlice 动态加载 initialState

转载 作者:行者123 更新时间:2023-12-04 11:40:52 24 4
gpt4 key购买 nike

是否有一种众所周知的模式可以将动态初始状态的负载注入(inject) Redux-Toolkit 的 initialState 对象?

也就是说,我想这样做 -

import initialState from './initialState';

function generateSlice(payload = {}){
const postsSlice = createSlice({
name: 'posts',
initialState: {...initialState, ...payload}, /// inject data here
reducers: {...}
})
}

例如, {availableRooms: []}是一个空数组,除非在 init 中注入(inject)数据 {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 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

最佳答案

这是我目前的解决方法,跳过 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-injectable 参数的混合。然后,在 initDispatch , 我调用 store.dispatch()对于一些基于注入(inject)初始状态的初始化逻辑。
这里使用 Typescript 非常有用,因为它强制从 getInitialState 返回的数据的形状。以及 reducer 的形状。

关于reactjs - 在 Redux Toolkit 中使用 createSlice 动态加载 initialState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60999058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com