Robię Ajax GET z mojej aplikacji Reagent, aby załadować pewne rzeczy z bazy danych.Ajax GET z Reagentem
Nie jestem do końca pewien, jaki jest najlepszy sposób uzyskania wyniku takiego wywołania ajaxowego na mojej stronie, biorąc pod uwagę, że jeśli umieściłem go w atomie, to Reagent automatycznie ponownie wyświetli komponent po dereferencji atomu, co oznacza, że otrzymuję nieskończoną sekwencję wywołań ajaxowych.
jakiegoś kodu,
(def matches (atom nil))
(defn render-matches [ms]
(reset! matches (into [:ul] (map (fn [m] ^{:key m}[:li m])
(walk/keywordize-keys (t/read (t/reader :json) ms)))))
Funkcja ta zasadniczo tworzy [:ul [:li "Stuff here"] [:li "And here"]]
której chciałbym wyświetlane na mojej stronie, która teraz ma następujący kod.
(defn standings-page []
(GET "/list-matches"
{:handler render-matches})
@matches)
W jaki sposób uruchamia się żądanie 'GET'? Czy ładuje się strona? Lub tylko jeśli potrzebujesz tego składnika odczynnika? A może akcja użytkownika? Kompilujesz tutaj wiele rzeczy. Wrzuciłem tylko dane (nie czkawkę) do atomu i renderowałem listę na stronie "zestawienia". Jeśli chcesz poprosić o to tylko raz, możesz sprawdzić "Opóźnienie" i podać opóźnienie na stronie "zestawienia". Ale znowu, to zależy od twojego przypadku użycia (stąd pierwsze kilka pytań) – ClojureMostly
Tak, nigdy nie wywołuj kodu wywołującego efekt uboczny bezpośrednio z renderowania. Zrób to z funkcji cyklu życia (np. Zamontuj wolę lub zamontuj) lub w komponencie odczynnika init (jak pokazano w odpowiedzi Michiel Borkent). – Dan