超出最大更新深度.使用TimePickerInput onChange事件React.js时的无限循环

Dun*_*yen 7 reactjs redux redux-form

我有这样的TimePickerInput组件

  class TimePickerInput extends React.Component {
  static propTypes = {
    value: PropTypes.string,
    onChange: PropTypes.func.isRequired,
    disabled: PropTypes.bool
  };

  static defaultProps = {
    onChange: function() {}
  };
  componentDidMount() {
    this._$input
      .timepicker({ 
        autoclose: true,
        minuteStep: 5,
        showSeconds: false,
        showMeridian: false
      })
      .on("changeTime.timepicker", e => {
        this.props.onChange(e.time.value);
      });
    this._$input.timepicker("setTime", this.props.value);
  }
  componentWillReceiveProps(nextProps) {
    this._$input.timepicker("setTime", nextProps.value);
  }
  render() {
    const { disabled } = this.props;
    return (
      <Wrapper>
        <IconWrapper>
          <Icon className="fa fa-clock-o" />
        </IconWrapper>
        <Input
          innerRef={ref => (this._$input = $(ref))}
          type="text"
          size="16"
          className="form-control"
          readOnly
          disabled={disabled}
        />
      </Wrapper>
    );
  }
}
export default TimePickerInput;
Run Code Online (Sandbox Code Playgroud)

当我在我的另一个组件中使用它时

<TimePickerInput  value={notificationConfig.timeToSendAuditReminder} onChange={e => this.onChangeTimeField(e, 'timeToSendAuditReminder')}/> 
Run Code Online (Sandbox Code Playgroud)

并拥有像这样的onChangeTimeField

onChangeTimeField = (value, fieldName) => {
    this.props.dispatch(notificationConfigActions.requestUpdateTimeField(value, fieldName))
  }  
Run Code Online (Sandbox Code Playgroud)

我总是得到这样的错误

Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.
Run Code Online (Sandbox Code Playgroud)

我找不到解决方法如何解决此错误.我认为它发生在on("changeTime.timepicker")和requestUpdateTimeField(value,fieldName)之间有很多onChange事件调用时

小智 0

这可能是因为您componentWillReceiveProps无条件使用。看这个看这个。您应该使用其中之一,不是componentWillReceiveProps因为它现在被认为是遗留的。