Elm Language
Gör komplexa uppdateringsfunktioner med ccapndave / elm-update-extra
Sök…
Introduktion
ccapndave / elm-update-extra är ett fantastiskt paket som hjälper dig att hantera mer komplexa uppdateringsfunktioner och kan vara mycket användbar.
Meddelande som ringer en lista med meddelanden
Med hjälp av sequence du enkelt beskriva ett meddelande som ringer en lista med andra meddelanden. Det är användbart när du hanterar semantik i dina meddelanden.
Exempel 1: Du skapar en spelmotor och du måste uppdatera skärmen i varje ram.
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]
Kedja meddelanden med andThen
Funktionen andThen tillåter uppdatering av samtalskomposition. Kan användas med pipeline-operatören ( |> ) för att kedja uppdateringar.
Exempel: Du skapar en dokumentredigerare och vill att varje ändringsmeddelande du skickar till ditt dokument också sparar det:
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
Om du importerar också Update.Extra.Infix exposing (..) kanske du kan använda infix-operatören:
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