首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将.bind(this)重构为ES6语法

如何将.bind(this)重构为ES6语法
EN

Stack Overflow用户
提问于 2017-01-17 06:33:38
回答 3查看 205关注 0票数 0

例如,我有一个React组件,它简单地加载文本。我在将.bind(this)重构为es6语法时遇到了问题。

代码语言:javascript
复制
var Loading = React.createClass({

getInitialState:() => {
this.originalText = 'Loading';
   return {
       text: 'Loading'
   }
},

componentDidMount:function() {
   let stopper = this.originalText + '...' ;
   this.interval = setInterval(function(){
       if(this.state.text === stopper) {
           this.setState({
               text:this.originalText
           })
       }else {
           this.setState({
               text: this.state.text + '.'
           })
       }
   }.bind(this), 300)
},


render: function () {
   return (
       <div style={styles.container}>
           <p style={styles.content}>{this.state.text}</p>
       </div>
   )
  }
});

在这里,我想重构

代码语言:javascript
复制
}.bind(this), 300)

转换为ES6语法。解决方案是什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-17 06:42:25

您可以替换:

代码语言:javascript
复制
this.interval = setInterval(function(){
    /* ... */
}.bind(this), 300)

通过以下方式:

代码语言:javascript
复制
 this.interval = setInterval( () => {
    /* ... */
 }, 300)

这是因为箭头函数会自动绑定。顺便说一句,我把你所有的组件代码重构成了ES6:

代码语言:javascript
复制
class Loading extends React.Component {

  constructor(props) {
    super(props)
    this.originalText = 'Loading'
    this.state = {
      text: 'Loading'
    }
  }

  componentDidMount() {
    let stopper = this.originalText + '...' ;
    this.interval = setInterval( () => {
      if(this.state.text === stopper) {
        this.setState({
          text:this.originalText
        })
      } else {
        this.setState({
          text: this.state.text + '.'
        })
      }
    }, 300)
  }


  render() {
    return (
      <div style={styles.container}>
        <p style={styles.content}>{this.state.text}</p>
      </div>
    )
  }

}

小提琴在这里:https://jsfiddle.net/mrlew/jgtyetwu/

票数 1
EN

Stack Overflow用户

发布于 2017-01-17 06:35:46

仍然是}.bind(this), 300)。ES6是向后兼容的。

您还可以使用箭头函数(就像定义getInitialState时一样)。

票数 1
EN

Stack Overflow用户

发布于 2017-01-17 06:36:48

function () { ... }.bind(this)是箭头函数应该做的事情。

它是

代码语言:javascript
复制
this.interval = setInterval(() => { ... }, 300)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41686091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档