开发者问题收集

如何找出 ReactJS 中的错误来源?

2018-08-14
10098

我收到此错误是因为我不小心在渲染方法中调用了某些方法。由于我的应用程序代码非常大,我无法找出它来自哪里。 在此处输入图片描述

当我单击控制台中的 index.js 链接时,它会将我带到以下代码。 enter image description here

这是我在调试(调用堆栈)后发现的,但这不是完整的组件代码,因为组件中的代码行太多,我只是在这里发布其中的一部分。这段代码有什么问题吗:

class Sample extends React.Component {
  constructor(props) {
    super(props);

    this.handleSelect = this.handleSelect.bind(this);

    this.state = {
      activeKey: '',
    };
  }
  handleSelect(activeKey) {
    this.setState({ activeKey });
  }

  render() {
    if (this.state.activeKey === '') {
      activeKey = this.getDefaultKey();
      this.handleSelect(activeKey);
    }
    return (
      <PanelGroup
        accordion
        activeKey={this.state.activeKey}
        onSelect={this.handleSelect}
      >
        {optionList}
      </PanelGroup>
    );
  }
}
2个回答

我会首先使用 react dev tools chrome 扩展程序,如果您使用 redux,也可以安装 redux dev tools,这两个工具都可以在 state 或 props 中发现错误。

不过,最有可能的是,您的某个组件中存在错误,您应该使用代码片段或代码库链接来更新您的问题。

Conrad Kay
2018-08-14

您在 render 函数中调用了 this.handleSelect,而该函数又调用了 setState。正如错误所言,您无法执行此操作。在没有看到整个组件并知道它应该做什么的情况下无法确定,但我猜测至少不会出错:

class SampleOptions extends React.Component {
  constructor(props, context) {
     super(props, context);

    this.handleSelect = this.handleSelect.bind(this);

    this.state = {
      activeKey: this.getDefaultKey(),
    };
  }
  handleSelect(activeKey) {
    this.setState({ activeKey });
  }

  render() {
    return (
      <PanelGroup
        accordion
        activeKey={this.state.activeKey}
        onSelect={this.handleSelect}
      >
        {optionList}
      </PanelGroup>
    );
  }
}
Steve Archer
2018-08-15