Angenommen, ich versuche, die Elm-Architektur zu folgen und meinen Workflow in User
s und Invoice
s zu teilen, während StartApp
verwendet wird.Kommunikation zwischen Komponenten in Elm
Benutzer haben Rechnungen, aber sie müssen sich anmelden, um auf sie zugreifen zu können.
Das Modell wie etwas in dieser Richtung sehen kann:
type Model
= NotLoggedIn Credentials
| LoggedIn RealName (Maybe Invoices)
type alias State =
{ login : Model
, notification : ......
, ......
type alias Invoices = { invoices: List Invoice, ...... }
Benutzer-Modul hat Aktionen:
type Action
= Login (Result Http.Error String)
| Logout
| Submit
...
und Update-Funktion:
update : Action -> Model -> (Model, Effects Action, Notification)
update action user =
case (action, user) of
(Login res, _) ->
case res of
Ok name ->
(LoggedIn name Nothing, Effects.none, Info "Welcome!")
...
springe ich die Details der Authentifizierung ist alles gut. Der interessante Teil ist Login
Aktion. Das Tupel wird auf die step
Funktion in main
gesendet:
step : Action -> State -> (State, Effects Action)
step action state =
case action of
UserAction a ->
let (newstate, ef, n) = User.update a state.login
in ({ state | login = newstate, notification = n }, Effects.map UserAction ef)
InvoiceAction a -> ......
So hat der Benutzer angemeldet Als nächstes werden wir einige init
Aktion im Invoice
Modul aufgerufen werden soll..
Aber wie soll das richtig gemacht werden? Wie initiiere ich die Aktion Invoice
um die Verkapselung zu erhalten? Soll ich etwas anderes als Effects.none
zurückgeben?
Vielen Dank für wertvolle Einblicke. – punund