【发布时间】:2021-10-16 18:00:33
【问题描述】:
我在 Django 中创建了一个 API,用于在我的 React JS 应用程序中获取 TODO 列表任务,但是当我在 useEffect Hook 的依赖数组中使用 useState 的 allTasks 时,它开始发送无休止的 get 请求。如果我将依赖项数组留空然后它工作正常,我也无法理解这是如何发生的,但是如果后台有一些数据发生变化,我必须手动刷新页面。
下面是Tasklist.js组件的代码
import React,{useState, useEffect} from 'react'
import axios from 'axios'
import Task from './Task'
function TaskList() {
async function getAllTasks(url){
let resp = await axios.get(url);
let all_tasks= await resp.data
return all_tasks;
}
const [allTasks, setAllTasks]= useState([])
useEffect(()=>{
async function appendTasks(){
let alltasks= await getAllTasks('http://127.0.0.1:8000/api/retrieve')
setAllTasks(alltasks)
}
appendTasks()
},[allTasks])
return (
<div className="TaskList">
{
allTasks.map(function(task){
return(
<Task key={task.id} task={task} />
)
})
}
</div>
)
}
export default TaskList
【问题讨论】:
-
每次标记的依赖项之一发生更改时,都会运行 useEffect 挂钩。所以在这种情况下,从依赖数组中删除 allTasks
-
在依赖项中添加
some data changes in background而不是allTasks -
这能回答你的问题吗? Infinite loop in useEffect
-
@im_baby 不,它没有
-
@OliverIlmjärv 但是如果我从依赖数组中删除 allTasks 那么它不会自动更新..如果任务发生变化
标签: reactjs react-redux axios react-router react-hooks