J'essaie de créer un formulaire simple avec react, mais je suis confronté à des difficultés pour que les données soient correctement liées à la valeur par défaut du formulaire.
Le comportement que je recherche est le suivant:
- Lorsque j'ouvre ma page, le champ de saisie de texte doit être rempli avec le texte de mon AwayMessage dans ma base de données. C'est "Exemple de texte"
- Idéalement, je souhaite avoir un espace réservé dans le champ de saisie Texte si le AwayMessage de ma base de données ne contient pas de texte.
Cependant, pour le moment, je constate que le champ de saisie de texte est vide chaque fois que j'actualise la page. (Bien que ce que je tape dans l'entrée enregistre correctement et persiste.) Je pense que c'est parce que le html du champ de texte d'entrée se charge lorsque AwayMessage est un objet vide, mais ne s'actualise pas lorsque le awayMessage se charge. De plus, je ne peux pas spécifier une valeur par défaut pour le champ.
J'ai supprimé une partie du code pour plus de clarté (c'est-à-dire 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>
mon console.log pour AwayMessage montre ce qui suit:
AWAY_MESSAGE Object {}
AWAY_MESSAGE Object {id: 1, company_id: 1, text: "Sample Text", master_toggle: false}