SetInterval 未获取最新的道具值

我有一个反应组件,我们 isAlive作为一个道具传递给它,它具有false来自父组件的初始值,我不确定setInterval这个console.log人是否还活着。当道具更新时,最新值不会反映在运行时设置的间隔中,它始终保留原始值,即false.


const printUserStatus = ({isAlive}) =>{


    setInterval(() => {


        if(isAlive === false){

             console.log("the user is Dead");

        }

        else if(isAlive === true){

             console.log("the user is Alive");

        } 

    },1000);

}

更新:感谢mahdi方法,通过以下方式解决了它 -


const printUserStatus = ({isAlive}) =>{


    const isAliveRef = useRef(isAlive);

    isAliveRef.current = isAlive;


    setInterval(() => {


        if(isAliveRef.current === false){

             console.log("the user is Dead");

        }

        else if(isAliveRef.current === true){

             console.log("the user is Alive");

        } 

    },1000);

}


哔哔one
浏览 219回答 2
2回答

慕桂英3389331

如果您有意从某个异步回调中读取最新状态,则可以将其保存在 ref 中,对其进行变异并从中读取。查看React 文档。基本上你看到的值是isAlive函数第一次被调用时的值。

侃侃无极

检查这个 6 岁的答案关于如何 setInterval工作https://stackoverflow.com/a/19123476/13647574使用类似的东西useRef()来避免这种情况
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript