Javascript 在父组件';s的状态已更新
我正在开发一个ToDo应用程序,我传递了一个包含对象的任务数组,但在将任务作为道具传递后,它在ToDoList中永远不会更新。 请帮助我,我感谢你的帮助,并想知道背后的逻辑 App.js:- 这是所有代码都存在的条目文件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
从'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
谢谢,因为这很有帮助。很有效,谢谢你,这很有帮助。它起作用了。谢谢,普拉蒂克,这个问题现在解决了。谢谢,普拉蒂克,这个问题现在解决了。