Sto riscontrando problemi con un modulo React e gestendo correttamente lo stato. Ho un campo di immissione del tempo in una forma (in modale). Il valore iniziale viene impostato come variabile di stato in getInitialStatee viene passato da un componente padre. Questo di per sé funziona bene.
Il problema si presenta quando voglio aggiornare il valore start_time predefinito tramite il componente padre. L'aggiornamento stesso avviene nel componente padre tramite setState start_time: new_time. Tuttavia, nella mia forma, il valore start_time predefinito non cambia mai, poiché viene definito solo una volta getInitialState.
Ho provato a usare componentWillUpdateper forzare un cambiamento di stato setState start_time: next_props.start_time, che in realtà ha funzionato, ma mi ha dato Uncaught RangeError: Maximum call stack size exceedederrori.
Quindi la mia domanda è: qual è il modo corretto di aggiornare lo stato in questo caso? Sto pensando a questo torto in qualche modo?
Codice attuale:
@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