react 中使用setTimeout

前端之家收集整理的这篇文章主要介绍了react 中使用setTimeout前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

React中使用setTimeout

setTimeout做轮询

  1. React由于是在内存中运行,所以即使是DOM对象已经被销毁了,如果在组件卸载(componentWillUnmount)的时候没有清楚掉定时器, setTimeout做循环还是会在内存中一直运行
  1. componentWillUnmount() {
  2. this.state.brush && clearTimeout(this.state.brush)
  3. }

2.this.state.brush是指向定时器的指针 每次 setTimeout执行都需要更新这个指针

  1. brushData = (time = this.state.brushtime,formdata = {
  2. wfid: this.state.wfid,begintime: this.state.time
  3. }) => {
  4. var brush = setTimeout(this.brushData,time * 5 * 1000);
  5. this.setState({brush})
  6. // 只有在表格数据返回之后才能再请求数据
  7. this.state.tableLoading || this.getPageData({...formdata},true)
  8. }

目标

使用setTimeout获取数据

  1. getPageData = (formdata,brushing) => {
  2. // brushing 如果是自动轮询获取数据则brushing值为true 避免请求数据陷入死循环 这一步只能有submint事件触发 因为要更新表单值
  3. if (this.state.brushtime && !brushing) {
  4. // 保存表单值 以便setTImeout的回调函数(其实也就是getPageData)能取得请求数据时的参数
  5. formdata && this.setState({wfid: formdata.wfid,time: formdata.begintime});
  6. this.brushData(this.state.brushtime);
  7. } else {
  8. this.setState({tableLoading: true})
  9. if (!formdata) {
  10. // 初次加载
  11. } else {
  12. // 缓存当前页面选择的时间
  13. }
  14. }
  15. }
  1. // brushData是回调函数 所以参数只能在当前作用域中取得
  2. brushData = (time = this.state.brushtime) => {
  3. var brush = setTimeout(this.brushData,time * 5 * 1000);
  4. this.setState({brush})
  5. // 只有在表格数据返回之后才能再请求数据 并且在刷新页面数据的时候表单值传入null使请求数据的函数直接从state中取相应的表单值
  6. this.state.tableLoading || this.getPageData(null,true)
  7. }

猜你在找的React相关文章