我已经解决了像我这样的所有问题,但是找不到适合此案例的任何东西。

请帮忙。

这是我的功能:

renderFields() {
    if (this.props.field) { // some prop

      return (
        <SelectBox
          className="selectbox"
          value={this.state.selectId}
        />
      );
    }
  }


使用位置:

renderAllFields() {
  <div>{this.renderFields()}</div>
}


这将生成以下消息:

Uncaught RangeError: Maximum call stack size exceeded


它可能与React的生命周期有关,但我不确定。

例如,当我检查时:

componentDidUpdate = (prevProps) => {
    console.log('prevProps', prevProps);
    console.log('this.props', this.props);
  };


他们看起来一样。

谢谢。

编辑:

render() {
  return (
    <div>
      <Formsy.Form
         ref="form"
         onChange={this.checkForChange}>
        <Grid fluid className="container__seven--holder">
          {this.renderAllFields()}
        </Grid>
     </Formsy.Form>
    </div>
  )
}


checkForChange()从表单获取值并使用以下命令设置更新状态:

this.setState(updatedState);


我相信问题出在每次更改上。.即使我移动鼠标,它也在不断更新。

最佳答案

由于您没有共享足够的信息或完整的组件代码,我怀疑以下原因可能是

更改

   <Formsy.Form
     ref="form"
     onChange={this.checkForChange}>
    <Grid fluid className="container__seven--holder">
      {this.renderAllFields()}
    </Grid>
 </Formsy.Form>




如果您希望checkForChange函数发生事件,则以下解决方案将起作用

    <Formsy.Form
     ref="form"
     onChange={e => this.checkForChange(e)}>
    <Grid fluid className="container__seven--holder">
      {this.renderAllFields()}
    </Grid>
 </Formsy.Form>


如果您不希望checkForChange函数发生事件,则可以使用以下解决方案

    <Formsy.Form
     ref="form"
     onChange={() => this.checkForChange()}>
    <Grid fluid className="container__seven--holder">
      {this.renderAllFields()}
    </Grid>
   </Formsy.Form>

关于javascript - 未捕获的RangeError:超出最大调用堆栈大小-ReactJS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53934524/

10-12 03:34