Bir React formuyla ilgili sorun yaşıyorum ve durumu düzgün bir şekilde yönetiyorum. Bir formda (modal) bir zaman girdi alanı var. Başlangıç değeri bir durum değişkeni olarak ayarlanır getInitialState
ve bir üst bileşenden iletilir. Bu kendi içinde iyi çalışıyor.
Üst bileşen aracılığıyla varsayılan başlangıç_zamanı değerini güncellemek istediğimde sorun geliyor. Güncellemenin kendisi üst bileşende aracılığıyla gerçekleşir setState start_time: new_time
. Ancak formumda, varsayılan başlangıç_zamanı değeri hiçbir zaman değişmez, çünkü yalnızca bir kez tanımlanır getInitialState
.
componentWillUpdate
Durumda bir değişikliği zorlamak için kullanmaya çalıştım setState start_time: next_props.start_time
, bu gerçekten işe yaradı, ama bana Uncaught RangeError: Maximum call stack size exceeded
hata verdi .
Benim sorum şu, bu durumda durumu güncellemenin doğru yolu nedir? Bunu bir şekilde yanlış mı düşünüyorum?
Mevcut Kod:
@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