我希望添加setInterval以便能够在不需要刷新页面的情况下从数据库中获取新数据,因此我使用useEffect、setInterval、useState来解决这个问题,将初始状态{refresh : false,refreshSells: null}放在refresh = true和refreshSells= setinterval()上进行切换,但是我收到了令人讨厌的警告:React useEffect缺少一个依赖项:'refreshSells‘。要么包含它,要么删除依赖数组,如果我添加refreshSells,它将是不可阻挡的循环。
const Sells = () => {
const [allSells,setAllSells] = useState([])
const [refresh,setRefresh] = useState(false)
const [refreshSells , setRefreshSells] = useState(null)
const [hidden,setHidden] = useState(true)
useEffect(() => {
Axios.get('/sells')
.then(({data}) => {
setAllSells(data.sells)
})
.catch(() => {
alert('something went wrong,ask omar')
})
},[])
useEffect(() => {
if(refresh){
setRefreshSells(setInterval(() => {
Axios.get('/sells')
.then(({data}) => {
setAllSells(data.sells)
})
}, 60000));
}
else{
clearInterval(refreshSells)
}
return () => clearInterval(refreshSells)
},[refresh])发布于 2020-08-01 09:39:35
如果您的业务逻辑允许分离这2种效果(每60年代自动刷新一次+单击某个按钮后手动刷新),那么这将简化每个独立效果的代码:
useEffect(() => {
const interval = setInterval(() => {
Axios.get('/sells')
.then(({data}) => {
setAllSells(data.sells)
})
}, 60000)
return () => clearInterval(interval)
}, [])
useEffect(() => {
if (refresh) {
setRefresh(false)
Axios.get('/sells')
.then(({data}) => {
setAllSells(data.sells)
})
};
}, [refresh])似乎您在触发刷新后忘记使用setRefresh(false),但我不知道您为什么首先需要refreshSells .
https://stackoverflow.com/questions/63203552
复制相似问题