我在 React 表单和正确管理状态方面遇到问题。我有一个表单中的时间输入字段(在模态中)。初始值设置为 中的状态变量getInitialState,并从父组件传入。这本身工作正常。
当我想通过父组件更新默认的 start_time 值时,问题就出现了。更新本身通过setState start_time: new_time. 但是在我的表单中,默认start_time值永远不会改变,因为它只在getInitialState.
我试图通过componentWillUpdate强制改变状态setState start_time: next_props.start_time,这确实有效,但它给了我Uncaught RangeError: Maximum call stack size exceeded错误。
所以我的问题是,在这种情况下更新状态的正确方法是什么?我是不是在以某种方式考虑这个错误?
当前代码:
@ModalBody = React.createClass
  getInitialState: ->
    start_time: @props.start_time.format("HH:mm")
  #works but takes long and causes:
  #"Uncaught RangeError: Maximum call stack size exceeded"
  componentWillUpdate: (next_props, next_state) ->
    @setState(start_time: next_props.start_time.format("HH:mm"))
  fieldChanged: (fieldName, event) ->
    stateUpdate = {}
    stateUpdate[fieldName] = event.target.value
    @setState(stateUpdate)
  render: ->
    React.DOM.div
      className: "modal-body"
      React.DOM.form null,
        React.createElement FormLabelInputField,
          type: "time"
          id: "start_time"
          label_name: "Start Time"
          value: @state.start_time
          onChange: @fieldChanged.bind(null, "start_time")
@FormLabelInputField = React.createClass
  render: ->
    React.DOM.div
      className: "form-group"
      React.DOM.label
        htmlFor: @props.id
        @props.label_name + ": "
      React.DOM.input
        className: "form-control"
        type: @props.type
        id: @props.id
        value: @props.value
        onChange: @props.onChange