Elm Language
Complexe updatefuncties maken met ccapndave / elm-update-extra
Zoeken…
Invoering
ccapndave / elm-update-extra is een fantastisch pakket dat u helpt bij het verwerken van complexere updatefuncties, en kan erg handig zijn.
Bericht dat een lijst met berichten oproept
Met behulp van de sequence kunt u eenvoudig een bericht beschrijven dat een lijst met andere berichten oproept. Het is handig bij het omgaan met semantiek van uw berichten.
Voorbeeld 1: u maakt een game-engine en u moet het scherm op elk frame vernieuwen.
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]
Berichten koppelen met andThen
Met de functie andThen kunt u de samenstelling van de oproep bijwerken. Kan worden gebruikt met de pijplijnbeheerder ( |> ) om updates te ketenen.
Voorbeeld: u maakt een documenteditor en u wilt dat elk wijzigingsbericht dat u naar uw document verzendt, het ook opslaat:
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
Als u ook Update.Extra.Infix exposing (..) importeert, kunt u mogelijk de infix-operator gebruiken:
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