【问题标题】:Redux/toolkit TypeError: Cannot read properties of undefined (reading 'getState')Redux/toolkit TypeError: Cannot read properties of undefined (reading 'getState')
【发布时间】:2021-09-30 19:50:16
【问题描述】:

我在我的应用程序中使用 redux/toolkit 和实体适配器。问题是,当我想将选择器添加到我的切片时,我得到了未定义的 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.getState() 添加到driversSelectors.selectAll 时出现此错误。 @phry

标签: reactjs typescript redux-toolkit


【解决方案1】:

你在这里有一个循环依赖。

您的store.ts 需要从driverReducer.ts 导入DriverSlice。 你的driverReducer.ts需要从store.ts导入store

一个文件只能被完全评估,因此两个文件都必须在另一个之前评估,这是不可能的。

解决方案? 移动你的 export const selectAllDrivers = driversSelectors.selectAll(store.getState()); 到另一个文件。

另请注意,selectAllDrivers 将是在开始时评估一次driversSelectors.selectAll(store.getState()) 的结果 - 所以它可能只是您的初始状态。这可能不是你想要的,但不是这个问题的真正主题。

【讨论】:

  • 谢谢,@phry。将这些选择器移动到另一个文件会消除错误。但是,我无法通过调用selectAllDrivers 从我的组件中获取驱动程序。它返回一个空数组作为驱动程序列表。
  • 因为你根本不使用这样的选择器。你打算在哪里使用这些?在 React 组件中?
  • 是的,在反应组件中。我可以在我的组件中使用driversSelectors.selectAll(store.getState()),它可以工作。但是,这不是获得状态的最佳方式。你有什么建议?
  • 永远不要在你的组件中调用store.getState()。您需要为此使用react-redux。否则,存储更改不会使用相关数据更新组件。 const myData = useSelector(driversSelector.selectAll)
猜你喜欢
  • 2021-11-08
  • 2021-11-10
  • 2021-11-03
  • 1970-01-01
  • 2022-08-13
  • 2021-12-31
  • 1970-01-01
  • 2022-07-09
  • 2022-01-11
相关资源
最近更新 更多