【发布时间】:2020-03-05 23:44:49
【问题描述】:
我正在尝试按项目显示任务数。使用
调用 axios 请求getTasksByProject(_id);
导致“nbrOfTasks”经常被无限设置的循环。我怎样才能防止这种情况发生?
//Schema
const taskSchema = new mongoose.Schema({
title: String,
project: { type: ObjectId, ref: 'Project' },
})
const projectSchema = new mongoose.Schema ({
name: String
})
代码:
const List = ({ match }) => {
const [projects, setProject] = useState([]);
const [nbrOfTasks, setNbrOfTasks] = useState();
const getTasksByProject = ( _id) => {
axios.get(`/api/tasks/tasksByProject/${_id}`)
.then(response => {
setNbrOfTasks(response.data.length);
})
}
const loadProjects = () => {
axios.get('/api/projects/').then(response => {
setProject(response.data)
})
}
useEffect(() => {
loadProjects();
}, [])
return (
<>
<Table singleLine columns={4} striped>
<Table.Header>
<Table.Row>
<Table.HeaderCell>Name</Table.HeaderCell>
<Table.HeaderCell>#Tasks</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{projects.map((project) => {
const { _id, name, status, description } = project;
getTasksByProject(_id);
return (
<Table.Row key={_id}>
<Table.Cell>{`${name}`}</Table.Cell>
<Table.Cell>{nbrOfTasks}</Table.Cell>
</Table.Row>
)
})}
</Table.Body>
</Table>
</>
)
}
export default List;
【问题讨论】:
-
无限循环的原因是您使用 getTasksByProject 更改了渲染中的状态。 api可以改成返回项目的任务吗?如果你连死循环问题都解决不了,你的应用程序将不得不用项目数量调用 getTasksByProject api,这对性能非常不利。
标签: reactjs mongodb axios react-hooks