ฉันมีปัญหากับแบบฟอร์มการตอบโต้และการจัดการสถานะอย่างถูกต้อง ฉันมีช่องป้อนเวลาในรูปแบบ (ในคำกริยา) ค่าเริ่มต้นถูกตั้งค่าเป็นตัวแปรสถานะใน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