2016-07-19 5 views
6

Buduję aplikację na górze re-frame default template.Jaki jest prawidłowy sposób nadawania parametrów adresu URL sekretarza dla składnika odczynnika?

Mam następującą trasę Sekretarz:

(defroute "https://stackoverflow.com/users/:id" [] 
    (re-frame/dispatch [:set-active-panel :user-panel]) 

Chcę uzyskać dostęp id parametru z URL w moim składnik odczynnika. Jedynym sposobem na osiągnięcie tego, co znalazłem, jest ustawienie go na db. Coś jak:

(defroute "https://stackoverflow.com/users/:id" [id] 
    (re-frame/dispatch [:set-user-id id]) 
    (re-frame/dispatch [:set-active-panel :user-panel]) 

To z pewnością zanieczyszczają moim DB i takie podejście wydaje się być dziwne dla mnie jak kiedyś napisać coś takiego w reakcji (z react-router):

<Route path="/user/:id" component={MyComponent}> 
// object with params automatically attached as props to MyComponent 

Więc co jest prawidłowym sposobem nadawania parametrów sekretarskiego adresu URL komponentowi odczynnika?

UPD: W komentarzach znajduje się link do github discussion tego problemu. One odnoszą się do ustawiania parametrów URL do db w prawidłowy sposób. Tak czy inaczej, nie podoba mi się to. Powoduje to dużo większą złożoność (ustawianie parametrów, subskrybowanie ich, wyłączanie). I nie lubię myśleć o parametrach URL jako o stanie aplikacji. Czy jest jakiś hack lub coś takiego?

+0

@PiotrekBzdyl mam aktualizować moje pytanie . Jeśli masz jakieś hacki daj mi znać, w każdym razie dzięki. –

+0

@PiotrekBzdyl Czy możesz dodać to jako odpowiedź. Zaznaczę to jako poprawne, jeśli nic nowego nie pojawi się za kilka dni. Dzięki za pomoc –

+0

Przeniosłem moje uwagi do odpowiedzi. –

Odpowiedz

1

Wydaje się, że dyskusja na temat https://github.com/gadfly361/reagent-seed/issues/4 pokrywa dokładnie twój scenariusz i myślę, że to podejście jest zgodne z filozofią "pojedynczego DB", polegającą na zmianie ramek, w których zawartość bazy danych określa cały stan aplikacji (w tym panel i jego parametry).

Twierdzę, że jest to kwestia wiary w to, że pojedynczy atom DB jest właściwym podejściem, czy nie. Używanie bezpośrednio paramerów ścieżek (takich jak komponent Route odczytujący je bezpośrednio z adresu URL) jest jak pisanie komponentu, który nie korzysta z bazy danych atomu, ale z jakiegoś alternatywnego źródła danych (w tym przypadku ze ścieżki URL).

Można powiedzieć, że komponent Route wykonuje dokładnie to, co określa się jako złożoną logikę (subskrybuje zmiany ścieżki i zarządza innym stanem komponentu). W tym przypadku po prostu ponownie używasz istniejącego fragmentu kodu ze składnika Route zamiast robić to samo w kodzie aktualizującym dane bazy danych o zmianach ścieżek URL zgodnie z trasami sekretarek.

1

dane są dostępne z adresu URL przeglądarki

(.. js/window -location -pathname) 

następnie używając bidi (używamy bidi i aroganccy zamiast sekretarza. Np as blogged), a następnie

(bidi/match-route your-routes url) 
Powiązane problemy