Saya mengalami masalah dengan formulir Bereaksi dan mengelola negara dengan benar. Saya memiliki bidang input waktu dalam formulir (dalam modal). Nilai awal diatur sebagai variabel keadaan di getInitialState, dan diteruskan dari komponen induk. Ini dengan sendirinya berfungsi dengan baik.
Masalahnya muncul ketika saya ingin memperbarui nilai start_time default melalui komponen induk. Pembaruan itu sendiri terjadi di komponen induk melalui setState start_time: new_time. Namun dalam formulir saya, nilai start_time default tidak pernah berubah, karena hanya didefinisikan sekali dalam getInitialState.
Saya telah mencoba menggunakan componentWillUpdateuntuk memaksa perubahan melalui negara setState start_time: next_props.start_time, yang benar-benar bekerja, tetapi memberi saya Uncaught RangeError: Maximum call stack size exceededkesalahan.
Jadi pertanyaan saya adalah, apa cara yang benar untuk memperbarui keadaan dalam kasus ini? Apakah saya memikirkan kesalahan ini?
Kode Saat Ini:
@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