3

我正在尝试使用 React 0.13 和 ES6 语法编写一个小型 webapp。我正在使用 webpack 和 babel-loader 进行编译:

loaders: [
  { test: /\.js/, exclude: /node_modules/, loader: "babel-loader"}
]

我在方法中使用 this 变量时遇到问题,在我的代码中的多个地方都出现“这是未定义的”。例如:

export class PanelEditor extends React.Component {
  ...
  update (){
    if (!this.isMounted())
      return;

    this.setState(this.getStateFromStore());
  }
  ...
}

在这种情况下,永远不应未定义this变量。但是,我发现问题可能出在 Babel 重写代码的方式上:

update: {
  value: function update() {
    if (!this.isMounted()) {
      return;
    }
    this.setState(this.getStateFromStore());
  }
},

这样,在我看来,this变量是指对象文字而不是class。我怎样才能解决这个问题?

4

1 回答 1

5

这实际上不是问题。这this是未定义的,因为您没有绑定更新功能。

您可以在渲染中constructor或在渲染中执行此操作。大多数人在渲染中这样做。

<div onClick={this.update.bind(this)} />

或者(我的偏好),一个保留this.

<div onClick={() => this.update()} />
于 2015-03-29T04:43:22.047 回答