একটি প্রতিক্রিয়া ফর্ম নিয়ে এবং রাজ্যটি সঠিকভাবে পরিচালনা করতে আমার সমস্যা হচ্ছে। আমার একটি ফর্মের একটি টাইম ইনপুট ক্ষেত্র রয়েছে (একটি মডেলে)। প্রাথমিক মানটি একটি রাজ্যের ভেরিয়েবল হিসাবে সেট করা থাকে getInitialState
এবং এটি প্যারেন্ট উপাদান থেকে পাস করা হয়। এটি নিজেই সূক্ষ্মভাবে কাজ করে।
আমি যখন প্যারেন্ট উপাদানগুলির মাধ্যমে ডিফল্ট স্টার্টটাইম মান আপডেট করতে চাই তখন সমস্যাটি আসে। আপডেট নিজেই মাধ্যমে প্যারেন্ট উপাদান হয় setState start_time: new_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