Redux 工具包:未捕获类型错误:无法读取未定义的属性(读取“类型”)

L. *_*rto 5 javascript redux redux-reducers redux-toolkit

当我在extraReducers切片内部添加特定操作时,出现以下错误:

Uncaught TypeError: Cannot read properties of undefined (reading 'type')

例子:

import { createSlice } from '@reduxjs/toolkit'

export const mySlice = createSlice({
  name: 'name',
  initialState,
  extraReducers: (builder) => {
    // If I console.log action2 here, it turns out to be undefined
    builder.addCase(action1, () => ...) 
    builder.addCase(action2, () => ...) // when I add this specific action I get the error.
  },
  reducers: {
    ...
  },
})
Run Code Online (Sandbox Code Playgroud)

action2的定义类似于action1另一个文件中的 :

import { createAction } from '@reduxjs/toolkit'

export const action2 = createAction(
  'action2'
)
Run Code Online (Sandbox Code Playgroud)

为什么action2在 中未定义mySlice?我错过了什么?

更新:来自文档

使用 createAction 生成的操作创建器可以使用计算属性语法直接用作此处的键。

如果我正确理解了这句话,我可以替换这部分:

builder.addCase(action2, () => ...)

有了这个:

builder.addCase("action2", () => ...)

这确实可以解决问题。这个解决方案正确吗?

即便如此,理解为什么在与第一种方法一起使用时action2会出现这种情况可能会很好。undefined

mar*_*son 5

您很可能遇到循环导入依赖问题。是否还有其他切片文件也导入此文件?如果是这样,通常会导致其中一个切片在另一个文件的调用运行时未初始化createSlice,因此导入的所有操作创建者仍然是undefined.

https://redux-toolkit.js.org/usage/usage-guide#exporting-and-using-slices

RTK 版本1.7.0-beta.1实际上可以通过延迟实例化减速器来解决此问题。请尝试一下,看看它是否可以为您解决问题:

https://github.com/reduxjs/redux-toolkit/releases/tag/v1.7.0-beta.1