Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一个函数中使用两个useState,以便第二个useState可以使用第一个更新的useState?_Javascript_Reactjs_React Hooks_Use State - Fatal编程技术网

Javascript 如何在一个函数中使用两个useState,以便第二个useState可以使用第一个更新的useState?

Javascript 如何在一个函数中使用两个useState,以便第二个useState可以使用第一个更新的useState?,javascript,reactjs,react-hooks,use-state,Javascript,Reactjs,React Hooks,Use State,反应: 我正在尝试创建todoapp,但负责添加新任务的组件有问题。我想为新任务指定一个添加日期。这是我的组件任务列表是所有任务的列表: 从react导入{useState}; const ListHandler={tasksList,setTasksList}=>{ 常量[newTask,setNewTask]=useState{ id:tasksList.length, 内容:, 完成:错误, 主动:对, 日期:空, }; 常量inputHandler=e=>{ setNewTaskpre

反应: 我正在尝试创建todoapp,但负责添加新任务的组件有问题。我想为新任务指定一个添加日期。这是我的组件任务列表是所有任务的列表:

从react导入{useState}; const ListHandler={tasksList,setTasksList}=>{ 常量[newTask,setNewTask]=useState{ id:tasksList.length, 内容:, 完成:错误, 主动:对, 日期:空, }; 常量inputHandler=e=>{ setNewTaskprevState=>{ …国家, 内容:目标价值, }; }; const addHandler=e=>{ e、 防止违约; setNewTaskprevState=>{ …国家, 日期:新建date.toTimeString.split[0], }; setTasksListprevState=>[…prevState,newTask]; }; 回来 inputHandlere} > addHandlere}> 添加任务 ; };
导出默认ListHandler 这是因为新任务将在下一次渲染中可用,您可以执行以下操作,例如:

    const addHandler = (e) => {
        e.preventDefault();
        const newDate = date: new Date().toTimeString().split(" ")[0];
        
        setNewTask((prevState) => ({
          ...prevState,
          date: newDate
        }));
       
        setTasksList((prevState) => [...prevState, {...newTask, date: newDate }]);
      };

这可能会解决您的问题。创建一个新的状态TaskName用于处理更改输入,并修复了addhandler函数和inputhandler

  const [newTask, setNewTask] = useState([]);
  const [taskName, setTaskName] = useState("");


    const inputHandler = (e) => {
      setTaskName(e.target.value);
    };
    const addHandler = (e) => {
      e.preventDefault();
      setNewTask([...newTask,{
        id: newTask.length+1,
        content: taskName,
        done: false,
        active: true,
        date: new Date().toTimeString().split(" ")[0],
      }]);
      setTaskName("");
    };