react hooks页面实时刷新方式(setInterval)

 更新时间:2024年03月12日 15:30:57   作者:一车鸡蛋  
这篇文章主要介绍了react hooks页面实时刷新方式(setInterval),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 实现

页面实时刷新一般用定时器(setInterval())实现。

  • 定时器:setInterval() - 每多少秒执行一次指定的代码。(执行多次)
  • 延时器:setTimeout() - 多少秒以后执行指定代码。(执行1次)

定时器与延时器均为异步程序,放在异步队列里执行!

2. 注意点

  • 1.  页面使用定时器一定要记得清除。
  • 2.  useEffect 的数组依赖不要忘记,不然只执行一次。
  • 3.  也可以使用useRef(为了避免setInterval变量形成闭包)

方式一:使用数组依赖

function Index() {
  const [count, setCount] = useState(0);
 
  useEffect(() => {
    const timer = setInterval(() => {
    
    //可以调接口
    //可以存state,如setCount(count + 1)
    //可以调其他函数
 
    }, 1000);
    return () => clearInterval(timer);  //清除定时器不要忘记
  }, [count]);  //数组依赖不要忘记
 
  return <div>{count}</div>;
}

方式二:使用useRef

function Index() {
  const savecallback=useRef(null); //为了避免形成闭包
  function callback(){
    // 可以调其他函数
    // 可以调接口
  }
 
  /*每当组件被重新渲染,useEffect 都会将最新的回调函数赋值给 ref.current,接着 ref.current会被放到 setInterval 里去执行。所以 setInterval 虽只在组件初始化时被启动了一次,但它在执行每次定时任务时,使用的都是最新的回调函数。回调函数不再被困于闭包当中,最新的 state、props 自然能够被取到。*/
  
  useEffect(() => {
    (savecallback as any).current = callback;
  });
 
  useEffect(() => {
    const timer = setInterval(() => {
      (savecallback as any).current();
    }, 1000);
    return () => clearInterval(timer);
  }, []);
 
  return <div>页面</div>;
}

方式三:使用useReducer 状态管理 

(对于定时更新某个变量更友好,定时调接口的话还是上边两种更方便一点)

const intitstate= {count: 0};
 
function reducer(state = 0,action) {
  return {count: state.count + 1};
}
 
export default function Index() {
  const [state, dispatch] = useReducer(reducer,intitstate);
 
  useEffect(() => {
    setInterval(() => {
      dispatch();
    }, 1000);
  }, []);
 
  return <div>{state.count}</div>;
}

因为闭包的原因,回调函数无法取到最新的 state,而大多数场景下我们更新 state 前又必须先获取 state 的当前值。

那如何才能够在不读取最新 state 的前提下,对 state 进行增量更新,可以用useReducer 状态管理。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • React中的useState和setState的执行机制详解

    React中的useState和setState的执行机制详解

    这篇文章主要介绍了React中的useState和setState的执行机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Yarn安装项目依赖报error An unexpected error occurred: “XXXXX:ESOCKETTIMEOUT”问题解决

    Yarn安装项目依赖报error An unexpected error occurred: “XXXXX:E

    这篇文章主要为大家介绍了Yarn安装项目依赖报error An unexpected error occurred: “XXXXX:ESOCKETTIMEOUT”问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • React使用TypeScript的最佳实践和技巧

    React使用TypeScript的最佳实践和技巧

    在React项目中使用TypeScript可以显著提高代码的可维护性和可读性,并提供强大的类型检查功能,减少运行时错误,以下是一些优雅地将TypeScript集成到React项目中的最佳实践和技巧,需要的朋友可以参考下
    2024-06-06
  • React中的Hooks路由跳转问题

    React中的Hooks路由跳转问题

    这篇文章主要介绍了React中的Hooks路由跳转问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • useEffect中不能使用async原理详解

    useEffect中不能使用async原理详解

    这篇文章主要为大家介绍了useEffect中为什么不能使用async的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • react拖拽组件react-sortable-hoc的使用

    react拖拽组件react-sortable-hoc的使用

    本文主要介绍了react拖拽组件react-sortable-hoc的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • React自定义Hook的实现

    React自定义Hook的实现

    自定义Hook是一种自定义函数,它封装了React Hook的逻辑,并通过命名约定来使其可重用,本文主要介绍了React自定义Hook的实现,感兴趣的可以了解一下
    2023-11-11
  • React之错误边界 Error Boundaries示例详解

    React之错误边界 Error Boundaries示例详解

    这篇文章主要为大家介绍了React之错误边界Error Boundaries示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • React中setState/useState的使用方法详细介绍

    React中setState/useState的使用方法详细介绍

    这篇文章主要介绍了React中setState/useState的使用方法,useState 和 setState 在React开发过程中 使用很频繁,但很多人都停留在简单的使用阶段,并没有正在了解它们的执行机制
    2023-04-04
  • react实现页面水印效果的全过程

    react实现页面水印效果的全过程

    大家常常关注的是网站图片增加水印,而很少关注页面水印,其实这个需求也是比较常见的,比如公文系统、合同系统等,这篇文章主要给大家介绍了关于react实现页面水印效果的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论