当前位置: 首页 > 知识库问答 >
问题:

如何修复redux工具包中的打字错误?

诸葛令
2023-03-14

我正在用typescript做一个redux工具包教程。但我是个打字新手。

我不知道这里有什么问题。请告诉我你的见解。

这是一条错误消息:TS2322:类型“number”不可分配给类型“void | State | writableddraft”。

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;

共有2个答案

谢雅珺
2023-03-14

CaseReduce er返回值必须是val|State|Writable草稿而您的表达式:

(state, action) => state.value + action.payload

是一个返回数字的函数。解决方案是在返回值之前添加void操作符,将其设置为未定义。

(state, action) => void (state.value += action.payload)
百里海超
2023-03-14

没有花括号的箭头函数是一个隐含返回。所以你正在返回状态。价值行动。有效载荷是一个数字。

Redux Toolkit允许您返回一个新状态(类型状态|Writable草稿

您可能想要修改草稿状态,因此您需要在函数体周围使用花括号,这样您就不会返回任何内容。

这三个函数都有效。从最少到最详细排序:

  1. 您可以直接使用加法赋值操作符=
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => {
  state.value += action.payload;
}
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => {
  state.value = state.value + action.payload;
}
const increment: CaseReducer<State,PayloadAction<number>> = (state, action) => ({
  value: state.value + action.payload
});

如果存在除值之外的属性,则需要复制它们,如在传统Redux还原器中看到的{…state,value:newValue}。Redux工具包提供了选项1和2,因此您不必这样做。但是如果你选择返回一个新状态,那么它必须是一个完整的状态。

 类似资料:
  • 主要内容:Java16 打包工具的示例Java 14 引入了一个新的打包工具,基于 javapackager 的 jpackage。javapackager 是在 Java 8 中引入的,是 JavaFX 套件的一部分。由于 JavaFX 从 11 版本的 Java 中分离出来,因此该打包工具在标准产品中不再可用。 这个新工具旨在为操作系统提供本机安装程序。例如,Windows 的 msi/exe,MacOS 的 pkg/dmg,Li

  • 主要内容:Java14 打包工具的示例Java 14 引入了一个新的打包工具,基于 javapackager 的 jpackage。javapackager 是在 Java 8 中引入的,是 JavaFX 套件的一部分。由于 JavaFX 从 11 版本的 Java 中分离出来,因此该打包工具在标准产品中不再可用。 这个新工具旨在为操作系统提供本机安装程序。例如,Windows 的 msi/exe,MacOS 的 pkg/dmg,Li

  • 事实上,我在拉威尔是个新手,我正试图创建我的第一个项目。由于某些原因,我一直遇到这个错误(我甚至还没有开始编码) 我读到这与权限有关,但是chmod-R 775存储没有任何帮助。

  • 问题内容: 实际上我不知道问题出在哪里。我认为这必须在创建TableLayout时进行。我不知道如何解决错误并使该应用程序正常工作。该程序显示错误“ java.lang.ArithmeticException:被零除”错误该程序具有EditText(edText),要求用户输入。它的类型是NUMBER。(这里r是edText的值)在EditText下方有一个Button(bt),它显示edText

  • 我正在做一个laravel instragram克隆网站,但突然经过一些发展当我运行php工匠服务这个错误发生。 PHP警告:require(I:\LARAVEL\LARAVEL instagram clone\vendor\composer/。/ralouphie/getallheaders/src/getallheaders.PHP):无法打开流:第66行的I:\LARAVEL\LARAVEL

  • 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等),但还有另外一种不太常见却又十分有用的方式。 Git 可以将它的数据“打包”到一个文件中。 这在许多场景中都很有用。 有可能你的网络中断了,但你又希望将你的提交传给你的合作者们。 可能你不在办公网中并且出于安全考虑没有给你接入内网的权限。 可能你的无线、有线网卡坏掉了。 可能你现在没有共享服务器的权限,你又希望通过邮件将