Redux/toolkit TypeError: Cannot read properties of undefined (reading 'getState')
Redux/toolkit TypeError: Cannot read properties of undefined (reading 'getState')
我在我的应用程序中使用 redux/toolkit 和实体适配器。问题是,当我想将选择器添加到我的切片时,我得到了 undefined for store.getState();
我是根据 Redux Toolkit 文档写的。
driverReducer.ts
const driversAdapter = createEntityAdapter<Driver>({
sortComparer: (a, b) => a.name.localeCompare(b.name),
});
export const DriverSlice = createSlice({
name: "drivers",
initialState: driversAdapter.getInitialState(),
reducers: {
setDrivers: driversAdapter.setAll,
driverAdded: driversAdapter.addOne,
driverUpdated: driversAdapter.updateOne,
driverRemoved: driversAdapter.removeOne,
},
});
const driversSelectors = driversAdapter.getSelectors<RootState>(state => state.drivers);
export const selectAllDrivers = driversSelectors.selectAll(store.getState());
export default DriverSlice.reducer;
store.ts
export const store = configureStore({
reducer: {
drivers:driverReduces,
},
});
我该如何解决这个问题?
你在这里有一个循环依赖。
您的 store.ts
需要从 driverReducer.ts
导入 DriverSlice
。
您的 driverReducer.ts
需要从 store.ts
.
导入 store
一个文件只能被完全评估,所以两个文件都必须在另一个文件之前被评估,这是不可能的。
解决方案?
移动你的
export const selectAllDrivers = driversSelectors.selectAll(store.getState());
到另一个文件。
另请注意,selectAllDrivers
将是在开始时评估 driversSelectors.selectAll(store.getState())
一次的结果 - 因此它可能只是您的初始状态。这可能不是你想要的,但不是这个问题的真正主题。
我在我的应用程序中使用 redux/toolkit 和实体适配器。问题是,当我想将选择器添加到我的切片时,我得到了 undefined for store.getState();
我是根据 Redux Toolkit 文档写的。
driverReducer.ts
const driversAdapter = createEntityAdapter<Driver>({
sortComparer: (a, b) => a.name.localeCompare(b.name),
});
export const DriverSlice = createSlice({
name: "drivers",
initialState: driversAdapter.getInitialState(),
reducers: {
setDrivers: driversAdapter.setAll,
driverAdded: driversAdapter.addOne,
driverUpdated: driversAdapter.updateOne,
driverRemoved: driversAdapter.removeOne,
},
});
const driversSelectors = driversAdapter.getSelectors<RootState>(state => state.drivers);
export const selectAllDrivers = driversSelectors.selectAll(store.getState());
export default DriverSlice.reducer;
store.ts
export const store = configureStore({
reducer: {
drivers:driverReduces,
},
});
我该如何解决这个问题?
你在这里有一个循环依赖。
您的 store.ts
需要从 driverReducer.ts
导入 DriverSlice
。
您的 driverReducer.ts
需要从 store.ts
.
store
一个文件只能被完全评估,所以两个文件都必须在另一个文件之前被评估,这是不可能的。
解决方案?
移动你的
export const selectAllDrivers = driversSelectors.selectAll(store.getState());
到另一个文件。
另请注意,selectAllDrivers
将是在开始时评估 driversSelectors.selectAll(store.getState())
一次的结果 - 因此它可能只是您的初始状态。这可能不是你想要的,但不是这个问题的真正主题。