首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React缺少一个依赖项:‘刷新感觉’。要么包含它,要么删除依赖数组。

React缺少一个依赖项:‘刷新感觉’。要么包含它,要么删除依赖数组。
EN

Stack Overflow用户
提问于 2020-08-01 09:08:58
回答 3查看 527关注 0票数 0

我希望添加setInterval以便能够在不需要刷新页面的情况下从数据库中获取新数据,因此我使用useEffect、setInterval、useState来解决这个问题,将初始状态{refresh : false,refreshSells: null}放在refresh = true和refreshSells= setinterval()上进行切换,但是我收到了令人讨厌的警告:React useEffect缺少一个依赖项:'refreshSells‘。要么包含它,要么删除依赖数组,如果我添加refreshSells,它将是不可阻挡的循环。

代码语言:javascript
复制
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])
EN

Stack Overflow用户

发布于 2020-08-01 09:39:35

如果您的业务逻辑允许分离这2种效果(每60年代自动刷新一次+单击某个按钮后手动刷新),那么这将简化每个独立效果的代码:

代码语言:javascript
复制
    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 .

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63203552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档