Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 在父组件';s的状态已更新_Javascript_Reactjs_React Native_React Hooks_Client Server - Fatal编程技术网

Javascript 在父组件';s的状态已更新

Javascript 在父组件';s的状态已更新,javascript,reactjs,react-native,react-hooks,client-server,Javascript,Reactjs,React Native,React Hooks,Client Server,我正在开发一个ToDo应用程序,我传递了一个包含对象的任务数组,但在将任务作为道具传递后,它在ToDoList中永远不会更新。 请帮助我,我感谢你的帮助,并想知道背后的逻辑 App.js:- 这是所有代码都存在的条目文件 从'react'导入{useState,useffect}; 导入“/App.css”; 从“./components/AddToDo”导入AddToDo; 从“./components/Filter”导入筛选器; 从“./components/ToDoList”导入ToDoL

我正在开发一个ToDo应用程序,我传递了一个包含对象的任务数组,但在将任务作为道具传递后,它在ToDoList中永远不会更新。 请帮助我,我感谢你的帮助,并想知道背后的逻辑

App.js:- 这是所有代码都存在的条目文件

从'react'导入{useState,useffect};
导入“/App.css”;
从“./components/AddToDo”导入AddToDo;
从“./components/Filter”导入筛选器;
从“./components/ToDoList”导入ToDoList;
window.id=0;
函数App(){
const[value,setvalue]=使用状态(“”);
const[tasks,settasks]=useState([]);
常量handleChange=(e)=>setvalue(e.target.value);
常量handleTasks=(val)=>{
push({text:val,completed:false,id:window.id++});
设置任务(任务);
setItem('tasks',JSON.stringify(tasks));
};
返回(
纳瑞斯托多酒店
);
}
导出默认应用程序;
AddToDo 这里是我们通过在app.js中更改状态添加任务的地方

从“React”导入React;
const AddToDO=(道具)=>{
返回(
props.onAdd(props.value)}>
添加
);
};
导出默认AddToDO;
ToDoList.js:-这是它应该更新任务道具的地方

import React,{useState}来自“React”;
const ToDoList=(道具)=>{
返回(
{props.tasks.map((任务,id)=>{
返回(
{task.text}
);
})}
);
};
将默认值导出到列表;

您已经修改了原始任务数组。每次更改该值时,任务数组都会被覆盖。因此,您需要将任务数组更新为:

const handleTasks = (val) => {
  let customTask = { text: val, completed: false, id: window.id++ };
  settasks(tasks => [...tasks, customTask]);
  localStorage.setItem('tasks', JSON.stringify(tasks));
};

您已更改了原始任务数组。每次更改该值时,任务数组都会被覆盖。因此,您需要将任务数组更新为:

const handleTasks = (val) => {
  let customTask = { text: val, completed: false, id: window.id++ };
  settasks(tasks => [...tasks, customTask]);
  localStorage.setItem('tasks', JSON.stringify(tasks));
};
您永远不应该直接改变/改变您的状态删除这一行
tasks.push({text:val,completed:false,id:window.id++})
在ToDoList.js中,它应该仅为task,而不是task.text

您永远不应该直接改变/改变您的状态删除这一行
tasks.push({text:val,completed:false,id:window.id++})
在ToDoList.js中,它应该仅为task,而不是task.text


谢谢,因为这很有帮助。很有效,谢谢你,这很有帮助。它起作用了。谢谢,普拉蒂克,这个问题现在解决了。谢谢,普拉蒂克,这个问题现在解决了。