Ich habe Probleme mit einem Reaktionsformular und der ordnungsgemäßen Verwaltung des Status. Ich habe ein Zeit-Eingabefeld in einem Formular (in einem Modal). Der Anfangswert wird als Statusvariable in festgelegt getInitialStateund von einer übergeordneten Komponente übergeben. Dies an sich funktioniert gut.
Das Problem tritt auf, wenn ich den Standardwert start_time über die übergeordnete Komponente aktualisieren möchte. Das Update selbst erfolgt in der übergeordneten Komponente durch setState start_time: new_time. In meinem Formular ändert sich der Standardwert start_time jedoch nie, da er nur einmal in definiert wird getInitialState.
Ich habe versucht, componentWillUpdateeine Zustandsänderung durchzusetzen setState start_time: next_props.start_time, die tatsächlich funktioniert hat, aber mir Uncaught RangeError: Maximum call stack size exceededFehler gegeben hat.
Meine Frage ist also, wie man den Status in diesem Fall richtig aktualisiert. Denke ich irgendwie falsch darüber nach?
Aktueller Code:
@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