react中settimeout_react 中使用setTimeout

React中使用setTimeout

setTimeout做轮询

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

componentWillUnmount() {

this.state.brush && clearTimeout(this.state.brush)

}

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

brushData = (time = this.state.brushtime, formdata = {

wfid: this.state.wfid,

begintime: this.state.time

}) => {

var brush = setTimeout(this.brushData, time * 5 * 1000);

this.setState({brush})

// 只有在表格数据返回之后才能再请求数据

this.state.tableLoading || this.getPageData({...formdata}, true)

}

目标

使用setTimeout获取数据

请求数据的方法

getPageData = (formdata, brushing) => {

// brushing 如果是自动轮询获取数据则brushing值为true 避免请求数据陷入死循环 这一步只能有submint事件触发 因为要更新表单值

if (this.state.brushtime && !brushing) {

// 保存表单值 以便setTImeout的回调函数(其实也就是getPageData)能取得请求数据时的参数

formdata && this.setState({wfid: formdata.wfid, time: formdata.begintime});

this.brushData(this.state.brushtime);

} else {

this.setState({tableLoading: true})

if (!formdata) {

// 初次加载

} else {

// 缓存当前页面选择的时间

}

}

}

循环的方法

// brushData是回调函数 所以参数只能在当前作用域中取得

brushData = (time = this.state.brushtime) => {

var brush = setTimeout(this.brushData, time * 5 * 1000);

this.setState({brush})

// 只有在表格数据返回之后才能再请求数据 并且在刷新页面数据的时候表单值传入null使请求数据的函数直接从state中取相应的表单值

this.state.tableLoading || this.getPageData(null, true)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值