Elm Language
Haciendo funciones de actualización complejas con ccapndave / elm-update-extra
Buscar..
Introducción
ccapndave / elm-update-extra es un paquete fantástico que le ayuda a manejar funciones de actualización más complejas y puede ser muy útil.
Mensaje que llama a una lista de mensajes.
Usando la función de sequence , puede describir fácilmente un mensaje que llame a una lista de otros mensajes. Es útil cuando se trata de la semántica de sus mensajes.
Ejemplo 1: Está creando un motor de juego y necesita actualizar la pantalla en cada fotograma.
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]
Encadenando mensajes con y luego
La función andThen permite actualizar la composición de la llamada. Se puede utilizar con el operador de tubería ( |> ) para encadenar actualizaciones.
Ejemplo: está creando un editor de documentos y desea que cada mensaje de modificación que envíe a su documento también lo guarde:
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
Si también importa Update.Extra.Infix exposing (..) puede usar el operador infijo:
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