suy*_*eon 9 typescript redux redux-toolkit
我正在用打字稿做一个 redux-toolkit 教程。但我是打字稿初学者。
我不知道这里出了什么问题。请给我你的见解。
这是一条错误消息。: TS2322: 类型“number”不可分配给类型“void |” 状态| 可写草稿'。
import {CaseReducer, createSlice, PayloadAction} from "@reduxjs/toolkit";
type State = {
value: number
}
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => state.value + action.payload; // error line
export const counterSlice = createSlice({
name: 'counter',
initialState: {
value: 0
},
reducers: {
increment,
decrement: state => {
state.value -= 1
},
incrementByAmount: (state, action) => {
state.value += action.payload
},
},
})
export const {increment, decrement, incrementByAmount} = counterSlice.actions;
export default counterSlice.reducer;
Run Code Online (Sandbox Code Playgroud)
Lin*_*ste 10
没有大括号的箭头函数是隐含的 return。所以你要返回的state.value + action.payload
是一个number
.
Redux Toolkit 允许您返回新状态(State | WritableDraft<State>
在回答此答案时键入,或键入State | Draft<State>
较新版本的 RTK)或修改草稿状态而不返回任何内容(键入void
)。您会收到 Typescript 错误,因为返回的number
不是“两者”或“这些”。
您可能想要修改草稿状态,因此您需要在函数体周围加上大括号,这样您就不会返回任何内容。
这三个函数都是有效的。从最详细到最详细排序:
+=
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => {
state.value += action.payload;
}
Run Code Online (Sandbox Code Playgroud)
state.value
为属性分配新值=
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => {
state.value = state.value + action.payload;
}
Run Code Online (Sandbox Code Playgroud)
value
。const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => ({
value: state.value + action.payload
});
Run Code Online (Sandbox Code Playgroud)
如果存在除value
您之外的属性,则需要复制它们,就像{...state, value: newValue }
您在传统 Redux 减速器中看到的那样。Redux Toolkit 提供了选项 1 和 2,因此您不必执行此操作。但如果您选择返回一个新状态,那么它必须是一个完整的状态。
归档时间: |
|
查看次数: |
22384 次 |
最近记录: |