javascript - 倒计时功能,用setInterval设置每秒重设状态,报错this.setState is not a function
高洛峰
高洛峰 2017-04-11 09:47:21
[JavaScript讨论组]
import React from 'react';
import styles from './style/style.css'

let secondsToHms = (d) =>{
    d = parseInt(d);
    let h = Math.floor(d / 3600);
    let m = Math.floor(d % 3600 / 60);
    let s = Math.floor(d % 3600 % 60);
    return (
        (h > 0 ? h + ":" + (m < 10 ? "0" : "") : "") + m + ":" + (s < 10 ? "0" : "") + s
    )
}

class Timer extends React.Component {
    constructor(...args){
        super(...args);
        this.state = {
            sessionName:'work',
            timeLeft:25,
        }
    }
    toggleTimer(){
        let timeNumber = this.state.timeLeft;
        let secs = 60 * timeNumber;
        setInterval(updateTime,1000);

        function updateTime(){
            this.setState({               //就是这里报错,想要正确的倒计
                timeLeft:secondsToHms(secs),//时效果应该怎么做
            });
            secs--;
        }
        
    }
    render() {
        return (
            

{this.state.sessionName}

{this.state.timeLeft}

) } } export default Timer;
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
ringa_lee

要绑定this(敲黑板)!

箭头函数:

const updateTime = () => {};
setInterval(updateTime,1000);

别名:

const self = this;
function updateTime(){ self.setState({...}) }
setInterval(updateTime,1000);
PHP中文网

this作用域的问题吧,你在setInterval(updateTime,1000);上面写个let self = this;然后把this.setState改成self.setState试试,希望能帮到你。

阿神
let that=this;
function updateTime(){
            that.setState({               //就是这里报错,想要正确的倒计
                timeLeft:secondsToHms(secs),//时效果应该怎么做
            });
            secs--;
        }
伊谢尔伦

this 作用于问题

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号