Saya mencoba membuat formulir sederhana dengan react, tetapi menghadapi kesulitan karena data terikat dengan benar ke defaultValue formulir.
Perilaku yang saya cari adalah ini:
- Saat saya membuka halaman saya, bidang input Teks harus diisi dengan teks AwayMessage saya di database saya. Itu adalah "Contoh Teks"
- Idealnya saya ingin memiliki tempat penampung di bidang input Teks jika AwayMessage di database saya tidak memiliki teks.
Namun, saat ini, saya menemukan bahwa bidang input Teks kosong setiap kali saya menyegarkan halaman. (Meskipun apa yang saya ketikkan ke dalam input memang menyimpan dengan benar dan bertahan.) Saya pikir ini karena html kolom teks input dimuat ketika AwayMessage adalah objek kosong, tetapi tidak menyegarkan ketika awayMessage dimuat. Selain itu, saya tidak dapat menentukan nilai default untuk bidang tersebut.
Saya menghapus beberapa kode untuk kejelasan (yaitu 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>
console.log saya untuk AwayMessage menampilkan yang berikut:
AWAY_MESSAGE Object {}
AWAY_MESSAGE Object {id: 1, company_id: 1, text: "Sample Text", master_toggle: false}