Im usando Flux, reagire e ho le componenti semplici e messaggi:Reagire e Flux: "spedizione nel bel mezzo di un dispaccio" per visualizzare il messaggio di errore da una chiamata API
- Semplice: si' è un componente semplice che chiama un'API da un'azione. L'azione esegue una richiesta di posta elettronica e invia il risultato in
jqXHR.done()
. Semplice avere un ascoltatore di modifiche per attendere l'invio del risultato. Se il risultato è nullo, mi piacerebbe mostrare un errore usando il mio componente Messaggi, quindi chiamo il mioMessagesAction.addError('My result is null')
. - Messaggi: un componente che mostra errori per l'applicazione. Questo componente ha un listener di modifiche in attesa di nuovi messaggi da visualizzare. È inserito nell'intestazione della mia domanda.
Il problema si verifica quando si riceve il risultato nullo e si chiama immediatamente lo MessagesAction.addError
all'interno del componente Semplice. In effetti, so che questo può causare l'errore "Invio nel mezzo di una spedizione", ma non so come refactoring questo codice per mostrare il messaggio di errore utilizzando Flux.
Disclaimer 1: Non riesco a utilizzare la funzione setTimeout
per risolvere questo problema. Questa non è la soluzione giusta.
Disclaimer 2: il componente Simple
rappresenta qualsiasi altro componente dell'app che mostrerà un messaggio anche utilizzando il componente Messaggi.
codice semplice:
findUser: function (value) {
UserAction.find(value);
},
componentDidMount: function() {
UserStore.addChangeListener(this.updateUser);
},
updateUser: function(){
var user = UserStore.getUser();
if (user == null){
MessagesAction.addError('My result is null!'); //here occur the error!
} else {
//set my user with setState
}
},
codice
Messaggi:
componentDidMount: function() {
MessagesStore.addChangeListener(this.addMessage);
},
addMessage: function() {
this.setState({
messages: MensagensStore.getMessages()
});
},
Grazie!
Il componente 'Simple' rappresenta qualsiasi altro componente dell'app che mostrerà un messaggio utilizzando anche il componente Messaggi. Molti componenti, in diverse situazioni, dovranno mostrare un messaggio. – Dherik
In questo caso, il componente 'Messaggi' dovrebbe essere un componente intelligente e ascoltare le modifiche sull'archivio dei messaggi stesso ... tutto ciò che dovresti fare è rendere il componente dove vuoi che i messaggi mostrino e gestirà la visualizzazione di essi . Spero che questo aiuti – Mark
Sì, sta già ascoltando l'archivio (MessagesStore) per i nuovi messaggi aggiunti per un altro componente da MessageAction. Ma quando lo faccio succede il problema che ho messo in relazione. – Dherik