मुझे एक रिएक्ट फॉर्म और राज्य को ठीक से प्रबंधित करने में परेशानी हो रही है। मेरे पास एक फॉर्म (एक मोडल) में एक समय इनपुट फ़ील्ड है। प्रारंभिक मान को राज्य चर के रूप में सेट किया जाता है 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