我有一些问题,让一个组件更新后,我改变了它的道具。
我有一个表单组件,我想让它向一个显示框组件发送一些数据。这个想法是,每次提交表单时,Box都会更新并添加新任务。
我使用钩子来完成这个任务。到目前为止,我有一个handleInput()方法,它返回显示组件并通过props传递对象。但是,我没有在Display组件中看到结果,即使我已经添加了一个useEffect来在每次更新道具时刷新。当我刷新页面时,来自显示组件的console.log()只运行一次,但是当我发送一个新表单时,不会发生其他任何事情。
表单如下:
function handleInput(e) {
e.preventDefault();
const submittedTask = {
name: taskName,
category: category,
time: estimatedTime,
deadline: deadline
};
return <DisplayTasks task={submittedTask}/>
}
下面是没有重新渲染的组件:
const DisplayContainer = ({ task }) => {
const [ availableTasks, setAvailableTasks ] = useState({});
useEffect(() => {
if (task) { setAvailableTasks(task) };
console.log("Current task: ", task}
}, [task])
//...
}
发布于 2020-12-13 15:55:17
这可能是因为prop,task是一个对象,而在js中,对象是通过引用赋值的。做这样的事情。
function handleInput(e) {
e.preventDefault();
const submittedTask = {
name: taskName,
category: category,
time: estimatedTime,
deadline: deadline
};
return <DisplayTasks task={...submittedTask}/>
}
https://stackoverflow.com/questions/65276556
复制相似问题