javascript - 错误 - TypeError:无法读取未定义的属性“值”
问题描述
我正在使用 React-Redux,这是我的切片 -
import { createSlice } from "@reduxjs/toolkit";
export const balanceSlice = createSlice({
name: "balance",
initialState: {
value: 0,
},
reducers: {
increment: (state) => {
state.value += 10000;
},
decrement: (state) => {
state.value -= 10000;
},
},
});
export const { increment, decrement } = balanceSlice.actions;
export const selectCount = (state) => state.balance.value;
export default balanceSlice.reducer;
在浏览器中,我收到此错误 - TypeError: Cannot read property 'value' of undefined
此错误指向倒数第二行。我看到的balance
是定义的,那为什么会抛出错误呢?
需要注意的是,在 Chrome Redux Devtools 中有一个状态counter
不是balance
我定义的。
解决方案
是balanceSlice
您唯一的减速器,还是您正在使用combineReducers
它与其他减速器结合使用?
此错误表明您的州没有名为 的顶级属性balance
。所以有这些可能性:
1)你有一堆减速器嵌套在balance
不在顶层的地方
counter
2 ) 您在组合 ( ?)时将此减速器分配给不同的键名
3)这个reducer是你的整个状态,在这种情况下没有balance
属性,因为整个状态是平衡。
如果它是#1,你需要找出你所在州的这个切片的路径。
如果是 #2,请修复您的combineReducers
.
如果是 #3,请将选择器更改为(state) => state.value
.
需要注意的是,在 Chrome Redux Devtools 中,正如我所定义的那样,有一个 counter not balance 的状态。
我很确定它是#2。我认为您从文档中复制了 acombineReducers
却不了解它在做什么。
你的减速机是这样的吗?
import balanceReducer from "./reducer"
// ^ or whatever you called it
const reducer = combineReducers({
counter: balanceReducer,
})
combine reducers 函数采用 reducers 的键值对对象。键(即counter
)成为 中的属性名称,state
值是该属性的化简器。您希望调用您的属性balance
,因此我们需要将其分配给balance
键。重要的是这个键,而不是切片名称,尽管它们通常是相同的。
import balanceReducer from "./reducer"
const reducer = combineReducers({
balance: balanceReducer,
})