this.context 使用react-router时不包含router

this.context does not contain router when using react-router

我正在使用 React、Redux、react-router、react-router-redux 的组合。我有一个组件需要将 URL 推送到浏览器的历史记录。在最新版本的 react-router (2.0.0-rc5) 中,我有一个具有以下属性的组件:

class TestComponent extends Component {
  contextTypes: {
    router: React.PropTypes.object.isRequired
  };

  render() {
    console.log(this.context) // empty object, where is router?
  }
}

似乎是 class 属性 初始化中的语法错误。

您有两个选择:

class TestComponent extends Component {
  static contextTypes = {
    router: PropTypes.object.isRequired
  }; // required semi-colon!
  ...
}

但是 class 属性仍然是测试版功能,因此经常会看到:

class TestComponent extends Component {
  ...
}

TestComponent.contextTypes = {
  router: PropTypes.object.isRequired
} // semi-colon not required

还要确保在 class 函数中使用括号!

testFunction() {
  // do stuff
}