non sono sicuro sul modo migliore per andare su questo:Mantenere client Stato Up-To-Date in Reattivo/ClojureScript
Ho un'applicazione web che sto scrivendo che implementa funzionalità di base CRUD per una serie di " Progetto "oggetti. Quindi, un utente può creare il proprio insieme di progetti.
Ho scritto un'API REST per aggiungere/rimuovere/elencare i progetti e ho scritto un client front-end Reagent. I progetti del cliente sono tenuti in un atomo di reagente (ratom), come ci si aspetterebbe.
Questo è il posto dove diventa interessante.
In tutte le esercitazioni che ho visto, mostra come aggiornare ratom e la GUI si aggiornerà automaticamente. Ce l'ho, funziona.
Quello che sto facendo è, al momento dell'aggiornamento dello stato del client, effettuo la mia chiamata REST POST per aggiornare lo stato del server sul database.
Ma questo non sembra giusto. Ora sto memorizzando lo stato in due punti: sul client e sul server, ed entrambi potrebbero essere diversi.
Se stavo implementando questa come una semplice pagina Web vecchia, il server invierebbe una pagina al client con lo stato più recente del database al suo interno. Ma lo stato esiste già sul client nel ratom e non so come dovrei sincronizzarlo.
Devo effettuare un'altra chiamata al server (una richiesta GET) dopo che il POST iniziale ha avuto esito positivo? Questo potrebbe sostituire il contenuto del ratom. Allora sto facendo due richieste ... che sembra uno spreco.
O è la pratica migliore per usare qualcosa come accordo o Sente per gestire lo stato del client in modo asincrono. Questo sarebbe meglio, poiché significherebbe che le modifiche da altri utenti verrebbero immediatamente aggiornate dal lato client. Ma non riesco a vedere alcun tutorial che dimostri di reagire con uno di questi, quindi forse sono sulla strada sbagliata.
Quindi la domanda è semplicemente, come si dovrebbe combinare una reazione con REST?
grazie
Ciao grazie per la risposta. Hai ragione: questo è un problema che può sorgere ovunque sia necessario sincronizzare lo stato in più punti. Ma sono specificamente alla ricerca di un modo per affrontarlo in reagente/clojurescript come è quello che sto costruendo in (pigro di me?) –
Mentre potrei restituire tutto lo stato di nuovo nella richiesta POST, penso che questo tipo di violi REST un po. Il tutorial sui reagenti non copre l'interazione lato server, ma suppongo che stiano sostenendo POST-then-GET, questo è certamente il modo in cui ho visto funzionare in altri posti (ad es. Https://github.com/clojurecup2014/ amichevole /). Sembra vergognoso che tu perdi tutta la reattività di React in questo modo aspettando 2 round trip dal server. –
Vedere una discussione qui su SO: https://stackoverflow.com/questions/19199872/best-practice-for-restful-post-response – schaueho