在将React模块转换为ES6类时如何解决`this`

詹姆

我有一个React在中可以正常工作模块ES5我正在将其转换为ES66to5用于转换。一切都可以正常进行,但是在尝试设置时出现运行时错误props当我放下debugger并查看时this,我看到的thisEventEmitter而不是课程。这是我的代码:

var React = require('react');

import CalendarStore from './../stores/calendar.store.js';

function getAppointments() {
  return {appts: CalendarStore.getAppts()}
}

export default class extends React.Component{
  constructor(props) {
    super(props);
    this.props = {
      view: 'weeks'
    }
  }

  changeView(child, view) {
    this.setProps({view: view});
  }

  componentWillMount() {
     CalendarStore.addChangeListener(this._onChange);
  }

  _onChange() {
    this.setProps(getAppointments());
  }

  ....
};

我遇到问题的地方在我的changeView职务上。当它transpiled关闭时,它看起来像这样:

  _onChange: {
      value: function _onChange() {
        this.setProps(getAppointments());
      },
      writable: true,
      configurable: true
    }

同样,在该函数内部this是my EventEmitter解决此问题的方法是什么?

旅团

this.setProps已弃用,请为此使用状态。它将在0.13中给出警告:

警告:setProps(...)在纯JavaScript React类中已弃用。

es6类方法也不是自动绑定的,因此您需要手动绑定它。您可以使用.bind(this)或使用箭头功能。但是,对于外部发射器,您确实需要保留参考。

您可以摆脱_onChange:

this._calendarListener = e => this.setState({things: e});
CalendarStore.addChangeListener(this._calendarListener);

或在构造函数中绑定:

constructor(props){
   ...
   this._onClick = this._onClick.bind(this);
}

不要忘记在componentWillUnmount中取消绑定事件:

componentWillUnmount(){
    CalendarStore.removeChangeListener(this._onClick);
    // or 
    CalendarStore.removeChangeListener(this._calendarListener);
}

添加事件监听器应该在componentDidMount中完成,而不是在componentWillMount中完成。构造函数替换es6类中的componentWillMount。

这段代码非常糟糕……您要覆盖道具反应集:

this.props = {
  view: 'weeks'
}

只要在代码中用“状态”替换所有“属性”的出现,一切都会很好。另外,您可能想要商店的初始状态。

this.state = {
  view: 'weeks',
  things: CalendarStore.getAppts()
}

另外,createClass不会很快消失,因此随时可以继续使用它。它通常更简单。通常,商店应由mixins处理,这与createClass无关紧要,但在es6类中很难做到。我有一个小库,用于带有react和es6类的mixins

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过模块加载和类继承将ES6转换为ES5

来自分类Dev

将旧的 JavaScript 代码转换为 ES6 模块

来自分类Dev

专用路由功能代码将转换为React-Redux的ES6类版本

来自分类Dev

将函数转换为es6类

来自分类Dev

将 javascript Winston 工厂类转换为 ES6

来自分类Dev

如何将UI的纯UI函数转换为ES6类?

来自分类Dev

如何将TypeScript转换为ES6?

来自分类Dev

如何将Purescript转换为ES6

来自分类Dev

将Java类转换为Kotlin后,如何解决:“错误:找不到符号类...”?

来自分类Dev

将Java类转换为Kotlin后,如何解决:“错误:找不到符号类...”?

来自分类Dev

将Typescript转换为ES6而无需异步转换的最佳解决方案?

来自分类Dev

将常见的js全局命名空间A-Frame项目转换为es6模块

来自分类Dev

将基于ES6挂钩的应用程序转换为基于类的组件

来自分类Dev

React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

来自分类Dev

尝试将类导出为模块ES6 babel

来自分类Dev

如何通过 Babel、Shim 和 Polyfill 将 Javascript 从 ES6 转换为 ES5

来自分类Dev

尝试将react-bootstrap轮播转换为es6和redux

来自分类Dev

从 React ES6 迁移到 TypeScript:将 (This) 转换为类型

来自分类Dev

如何使用ES6语法将选择选项的值转换为简单数组?

来自分类Dev

不确定如何将方法定义转换为 ES6

来自分类Dev

使用 gulp 将 es6 脚本转换为 JS

来自分类Dev

如何将具有成员变量的React组件重构为es6类

来自分类Dev

转换为json字符串时如何解决翻新转换异常

来自分类Dev

转换为json字符串时如何解决翻新转换异常

来自分类Dev

从模块覆盖/装饰 ES6 类

来自分类Dev

NodeJS ES6:类模块导出

来自分类Dev

将React组件从函数重构为ES6类

来自分类Dev

如何在 Angular App 的运行时将 ES6 代码转换为 ES5 代码

来自分类Dev

我如何解决错误Illuminate \ Database \ Eloquent \ Collection类的对象无法转换为int

Related 相关文章

  1. 1

    通过模块加载和类继承将ES6转换为ES5

  2. 2

    将旧的 JavaScript 代码转换为 ES6 模块

  3. 3

    专用路由功能代码将转换为React-Redux的ES6类版本

  4. 4

    将函数转换为es6类

  5. 5

    将 javascript Winston 工厂类转换为 ES6

  6. 6

    如何将UI的纯UI函数转换为ES6类?

  7. 7

    如何将TypeScript转换为ES6?

  8. 8

    如何将Purescript转换为ES6

  9. 9

    将Java类转换为Kotlin后,如何解决:“错误:找不到符号类...”?

  10. 10

    将Java类转换为Kotlin后,如何解决:“错误:找不到符号类...”?

  11. 11

    将Typescript转换为ES6而无需异步转换的最佳解决方案?

  12. 12

    将常见的js全局命名空间A-Frame项目转换为es6模块

  13. 13

    将基于ES6挂钩的应用程序转换为基于类的组件

  14. 14

    React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

  15. 15

    尝试将类导出为模块ES6 babel

  16. 16

    如何通过 Babel、Shim 和 Polyfill 将 Javascript 从 ES6 转换为 ES5

  17. 17

    尝试将react-bootstrap轮播转换为es6和redux

  18. 18

    从 React ES6 迁移到 TypeScript:将 (This) 转换为类型

  19. 19

    如何使用ES6语法将选择选项的值转换为简单数组?

  20. 20

    不确定如何将方法定义转换为 ES6

  21. 21

    使用 gulp 将 es6 脚本转换为 JS

  22. 22

    如何将具有成员变量的React组件重构为es6类

  23. 23

    转换为json字符串时如何解决翻新转换异常

  24. 24

    转换为json字符串时如何解决翻新转换异常

  25. 25

    从模块覆盖/装饰 ES6 类

  26. 26

    NodeJS ES6:类模块导出

  27. 27

    将React组件从函数重构为ES6类

  28. 28

    如何在 Angular App 的运行时将 ES6 代码转换为 ES5 代码

  29. 29

    我如何解决错误Illuminate \ Database \ Eloquent \ Collection类的对象无法转换为int

热门标签

归档