You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React传递函数为Props时出现'Uncaught TypeError: createTask is not a function'错误怎么办?

解决React函数组件传Props时的'Uncaught TypeError: createTask is not a function'错误

问题出在TaskForm组件的参数接收方式上:React函数组件的第一个参数是完整的props对象,而不是单个props属性。你当前直接写function TaskForm(createTask),这里的createTask实际上是整个props对象,而非你从App组件传递过来的函数,调用时自然会抛出“不是函数”的错误。

修正方案一:解构props对象

直接从props中解构出需要的createTask函数,这是React中最常用的写法:

import { useState } from "react";

function TaskForm({ createTask }) { // 添加解构语法
  const [title, setTitle] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault();
    const newTask = {
      title,
    };
    createTask(newTask);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        placeholder="Escribe tu tarea"
        onChange={(e) => setTitle(e.target.value)}
      />
      <button>Guardar</button>
    </form>
  );
}

export default TaskForm;

修正方案二:直接使用props对象

如果不想解构,也可以通过props对象访问对应的属性:

import { useState } from "react";

function TaskForm(props) { // 接收完整props对象
  const [title, setTitle] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault();
    const newTask = {
      title,
    };
    props.createTask(newTask); // 通过props访问createTask
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        placeholder="Escribe tu tarea"
        onChange={(e) => setTitle(e.target.value)}
      />
      <button>Guardar</button>
    </form>
  );
}

export default TaskForm;

额外优化建议

App组件中的createTask函数依赖当前的tasks状态,建议使用函数式更新来避免状态更新不及时的问题:

function createTask(task) {
  setTasks(prevTasks => [...prevTasks, task]); // 使用prevTasks获取最新状态
}

内容的提问来源于stack exchange,提问作者Yordanys Alvarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:09:25