Elm Language
Tworzenie złożonych funkcji aktualizacji za pomocą ccapndave / elm-update-extra
Szukaj…
Wprowadzenie
ccapndave / elm-update-extra to fantastyczny pakiet, który pomaga obsługiwać bardziej złożone funkcje aktualizacji i może być bardzo przydatny.
Wiadomość, która wywołuje listę wiadomości
Za pomocą funkcji sequence możesz łatwo opisać wiadomość, która wywołuje listę innych wiadomości. Jest to przydatne w przypadku semantyki wiadomości.
Przykład 1: Tworzysz silnik gry i musisz odświeżać ekran na każdej klatce.
module Video exposing (..)
type Message = module Video exposing (..)
import Update.Extra exposing (sequence)
-- Model definition [...]
type Message
= ClearBuffer
| DrawToBuffer
| UpdateLogic
| Update
update : Message -> Model -> (Model, Cmd)
update msg model =
case msg of
ClearBuffer ->
-- do something
DrawToBuffer ->
-- do something
UpdateLogic ->
-- do something
Update ->
model ! []
|> sequence update [ ClearBuffer
, DrawToBuffer
, UpdateLogic]
Łączenie wiadomości za pomocą andThen
Funkcja andThen umożliwia aktualizację składu połączeń. Może być używany z operatorem potoku ( |> ) do tworzenia łańcuchów aktualizacji.
Przykład: tworzysz edytor dokumentów i chcesz, aby każda wiadomość modyfikacyjna wysyłana do dokumentu również zapisywała:
import Update.Extra exposing (andThen)
import Update.Extra.Infix exposing (..)
-- type alias Model = [...]
type Message
= ModifyDocumentWithSomeSettings
| ModifyDocumentWithOtherSettings
| SaveDocument
update : Model -> Message -> (Model, Cmd)
update model msg =
case msg of
ModifyDocumentWithSomeSettings ->
-- make the modifications
(modifiedModel, Cmd.none)
|> andThen SaveDocument
ModifyDocumentWithOtherSettings ->
-- make other modifications
(modifiedModel, Cmd.none)
|> andThen SaveDocument
SaveDocument ->
-- save document code
Jeśli zaimportujesz również Update.Extra.Infix exposing (..) , możesz być w stanie użyć operatora infix:
update : Model -> Message -> (Model, Cmd)
update model msg =
case msg of
ModifyDocumentWithSomeSettings ->
-- make the modifications
(modifiedModel, Cmd.none)
:> andThen SaveDocument
ModifyDocumentWithOtherSettings ->
-- make other modifications
(modifiedModel, Cmd.none)
:> SaveDocument
SaveDocument ->
-- save document code
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow