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

React.js报错TypeError: toggleTask is not a function问题求助

问题排查结果

你代码里共有3处语法/传参错误,修改后即可正常运行:

  • 错误1:toggleTask 方法中 setTasks 调用错误
    App.js里的toggleTask函数,你写的是setTasks()(newTasks),属于调用语法错误,应该改为setTasks(newTasks)。
    修正后的代码:
    function toggleTask(id) {
      const newTasks = [...tasks]
      const task = newTasks.find(task => task.id === id)
      task.complete = !task.complete
      setTasks(newTasks) // 去掉多余的括号
    }
    
  • 错误2:父子组件prop命名不一致
    App组件给Tasklist传递的prop叫toggleTask,但是Tasklist组件接收的时候命名成了toggleTasks(多了末尾的s),同时Tasklist给Task组件传递的prop也错写为toggleTasks,而Task组件接收的参数是toggleTask,导致点击复选框时找不到对应的方法触发报错。
    修正Tasklist.js代码即可:
    import React from 'react'
    import Task from './Task'
    
    export default function Tasklist({ tasks, toggleTask }) { // 把toggleTasks改为toggleTask
        return (
            tasks.map(task => {
                return <Task key={task.id} toggleTask={toggleTask} task={task} /> // 把toggleTasks改为toggleTask
            })
        )
    }
    
  • 错误3:uuid方法未调用
    添加任务的逻辑里,你给新任务的id赋值为uuidv4,但是uuidv4是函数,必须调用才会生成唯一id字符串,应该改为uuidv4()。
    修正App.js里的handleAddTask代码:
    function handleAddTask(e){
      const name = taskNameRef.current.value
      if (name === '') return
      setTasks(prevTasks => {
        return [...prevTasks, {id: uuidv4(), name: name, complete: false}] // 给uuidv4加调用括号
      })
      taskNameRef.current.value = null
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:12:03