美文网首页
React学习笔记(6)ES6

React学习笔记(6)ES6

作者: nieniemin | 来源:发表于2019-08-23 19:58 被阅读0次

    昨天在按照官网上学习State & 生命周期,写时钟例子时发现对ES6语法很多地方还是不熟悉。下面代码是我刚开始写的setInterval方法,时钟不仅没有更新,直接页面就报错了。

     // 当我们需要访问真实的 DOM 时,这个方法就经常用到
        componentDidMount() {
            // 时间更新setInterval方法
         this.timerID = setInterval(function () {
                this.setState({
                    date: new Date()
                });
            },1000);
        }
    

    页面直接报错

    TypeError: this.setState is not a function

    百度了下说这种问题是在function(){function(){}}fn套fn的状态下没有缓存this 使this没有指向正确的组件实例化对象 导致访问不到setState方法。
    官网上使用的箭头函数,虽然java8中lambda看起来跟这个有点像,但区别还是蛮大的。

    this.timerID = setInterval(()=> this.tick(),1000);
    

    简单了解了下箭头函数跟function的区别。

    箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了。而匿名函数的this指向运行时实际调用该方法的对象,无法在编写函数时确定。
    看起来还是有点不知所云,大概明白上面我写的function里面调用了setInterval函数,该函数1000毫秒后调用我们定义的函数时,实际上是window对象调用的,所以这时匿名函数的this是指向window。如果用function方式就需要指明this,写法如下。

     componentDidMount() {
            // 时间更新setInterval方法
            // this.timerID = setInterval(()=> this.tick(),1000);
    
            var that = this;
            this.timerID = setInterval(function () {
                that.setState({
                    date: new Date()
                });
            },1000);
        }
    

    ES6语法还需要查漏补缺,学习一下。好多东西凭借自己的理解难免会出现错误。

    相关文章

      网友评论

          本文标题:React学习笔记(6)ES6

          本文链接:https://www.haomeiwen.com/subject/egfxectx.html