next.js Setter在React中使用TypeScript时出错

7bsow1i6  于 2023-05-17  发布在  React
关注(0)|答案(1)|浏览(173)

我正在用TypeScript和React创建一个小的todo应用程序。但是,当我想添加一个todo到我的todolist时,我得到了一个错误。我猜我的setter函数是错误的,我需要添加Dispatch和setStateAction。不幸的是,我刚刚学习TypeScript,想知道我做错了什么。
谢谢你的帮助!

import React, { Dispatch, SetStateAction, useState, useContext } from "react";

import { FormWrapper } from "./Style";
import { TodoContext } from "../../context/TodoContext";

interface Todo {}

function Form({}: Todo) {
  const [todo, setTodo] = useState<string | undefined>(undefined);
  const [todos, setTodos] = useContext(TodoContext);

  const submitHandler = (event: React.FormEvent<HTMLFormElement>) => {
    event.preventDefault();

    setTodos({ id: todos.length + 1, label: todo });
    setTodo("");
  };

  return (
    <div>
      <FormWrapper>
        <form action="" onSubmit={(e) => submitHandler(e)}>
          <input type="text" name="" id="" placeholder="Todo" />
          <input
            type="submit"
            placeholder="Add todo"
            value={todo}
            onChange={(e: React.ChangeEvent<HTMLInputElement>): void =>
              setTodo(e.target.value)
            }
          />
        </form>
      </FormWrapper>
    </div>
  );
}

export default Form;

我想在我的日程表上加个待办事项。

8yoxcaq7

8yoxcaq71#

看起来你的setTodos是一个Todo对象数组的setter。
在这种情况下,您可能希望向该数组添加一个额外的Todo,您可以这样做,例如。其中:

setTodos((prevTodos) => {
  const newTodo = {
    id: prevTodos.length + 1,
    label: todo
  };
  return [
    ...prevTodos,
    newTodo
  ];
});

相关问题