【发布时间】:2021-04-28 08:42:48
【问题描述】:
我得到以下反应代码
const [folders, setFolders] = useState([
{
id: 1,
title: 'name',
logo: 'logo',
tasks:
[
{
id: 1,
text: 'blaas bla bla',
done: true,
},
{
id: 2,
text: 'bla bla bla',
done: false,
},
]
},
{
id: 2,
title: 'name',
logo: 'logo',
tasks:
[
{
id: 3,
text: 'blasdasda bla bla',
done: true,
},
{
id: 4,
text: 'bla bla bla',
done: false,
},
]
},
{
id: 3,
title: 'naasdme',
logo: 'logo',
tasks:
[
{
id: 5,
text: 'bla bla bla',
done: false,
},
{
id: 6,
text: 'bla bla bla',
done: false,
},
]
}
]);
function deleteTask( taskId )
{
setFolders((prev) =>
{
prev.forEach( (folder) =>
{
folder.tasks = folder.tasks.filter( task => task.id != taskId )
})
return prev;
});
}
代码运行良好,它确实更新了状态,但组件不会重新渲染。
我正在使用带有声明式路由的组件,我尝试了几种方法来检查问题是否在路由中,但可能不是。
<Route path='/Tasks/:id' render={(props) =>
(
<Tasks {...props} folders={folders} onDelete={deleteTask} updateTask= {updateTask} />
)}
/>
<Route path='/Tasks/:id' >
<Tasks folders={folders} onDelete={deleteTask} updateTask={updateTask} />
</Route>
<Route path='/Tasks/:id' children={<Tasks folders={folders} onDelete={deleteTask}
updateTask={updateTask} /> } />
所有这 3 种方式都可以正常工作。
组件不重新渲染的任何建议方式?
【问题讨论】:
-
替换 forEach 映射并返回映射数组。
-
同样的问题改了但是没有重新渲染
标签: reactjs react-router components setstate