React ile basit bir form oluşturmaya çalışıyorum, ancak verilerin formun defaultValue değerine düzgün şekilde bağlanması konusunda zorluk yaşıyorum.
Aradığım davranış şudur:
- Sayfamı açtığımda, Metin giriş alanı veritabanımdaki AwayMessage metnimle doldurulmalıdır. Yani "Örnek Metin"
- İdeal olarak, veritabanımdaki AwayMessage'da metin yoksa, Metin giriş alanında bir yer tutucunun olmasını istiyorum.
Ancak şu anda, sayfayı her yenilediğimde Metin giriş alanının boş olduğunu görüyorum. (Girdiye yazdığım şey düzgün bir şekilde kaydediliyor ve kalıcı oluyor.) Bunun nedeni, AwayMessage boş bir nesne olduğunda girdi metin alanının html'sinin yüklenmesidir, ancak awayMessage yüklendiğinde yenilenmemesidir. Ayrıca, alan için varsayılan bir değer belirleyemiyorum.
Anlaşılır olması için kodun bir kısmını kaldırdım (yani onToggleChange)
window.Pages ||= {}
Pages.AwayMessages = React.createClass
getInitialState: ->
App.API.fetchAwayMessage (data) =>
@setState awayMessage:data.away_message
{awayMessage: {}}
onTextChange: (event) ->
console.log "VALUE", event.target.value
onSubmit: (e) ->
window.a = @
e.preventDefault()
awayMessage = {}
awayMessage["master_toggle"]=@refs["master_toggle"].getDOMNode().checked
console.log "value of text", @refs["text"].getDOMNode().value
awayMessage["text"]=@refs["text"].getDOMNode().value
@awayMessage(awayMessage)
awayMessage: (awayMessage)->
console.log "I'm saving", awayMessage
App.API.saveAwayMessage awayMessage, (data) =>
if data.status == 'ok'
App.modal.closeModal()
notificationActions.notify("Away Message saved.")
@setState awayMessage:awayMessage
render: ->
console.log "AWAY_MESSAGE", this.state.awayMessage
awayMessageText = if this.state.awayMessage then this.state.awayMessage.text else "Placeholder Text"
`<div className="away-messages">
<div className="header">
<h4>Away Messages</h4>
</div>
<div className="content">
<div className="input-group">
<label for="master_toggle">On?</label>
<input ref="master_toggle" type="checkbox" onChange={this.onToggleChange} defaultChecked={this.state.awayMessage.master_toggle} />
</div>
<div className="input-group">
<label for="text">Text</label>
<input ref="text" onChange={this.onTextChange} defaultValue={awayMessageText} />
</div>
</div>
<div className="footer">
<button className="button2" onClick={this.close}>Close</button>
<button className="button1" onClick={this.onSubmit}>Save</button>
</div>
</div>
AwayMessage için console.log'um şunları gösteriyor:
AWAY_MESSAGE Object {}
AWAY_MESSAGE Object {id: 1, company_id: 1, text: "Sample Text", master_toggle: false}