Tôi gặp sự cố với biểu mẫu Phản ứng và quản lý trạng thái đúng cách. Tôi có một trường đầu vào thời gian trong một hình thức (trong một phương thức). Giá trị ban đầu được đặt làm biến trạng thái getInitialState
và được truyền từ thành phần cha. Điều này tự nó hoạt động tốt.
Vấn đề xảy ra khi tôi muốn cập nhật giá trị start_time mặc định thông qua thành phần cha. Bản cập nhật xảy ra trong thành phần cha mẹ thông qua setState start_time: new_time
. Tuy nhiên, ở dạng của tôi, giá trị start_time mặc định không bao giờ thay đổi, vì nó chỉ được xác định một lần trong getInitialState
.
Tôi đã cố gắng sử dụng componentWillUpdate
để buộc thay đổi trạng thái thông qua setState start_time: next_props.start_time
, điều này thực sự có tác dụng, nhưng đã gây ra Uncaught RangeError: Maximum call stack size exceeded
lỗi cho tôi .
Vì vậy, câu hỏi của tôi là, cách cập nhật trạng thái chính xác trong trường hợp này là gì? Tôi đang nghĩ về điều này sai bằng cách nào đó?
Mã hiện tại:
@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