рдПрд▓реНрдоред рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдЕрдЬреАрдм

рдПрд▓реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВред


рдПрд▓реНрдо рдлреНрд░рдВрдЯреЗрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИред рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдПрд▓реНрдо рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрд╢реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХрд▓рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ DOM рд╕рдмрдЯреНрд░реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


рдПрд▓реНрдоред рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдЕрдЬреАрдмред рд░рдЪрдирд╛
рдПрд▓реНрдоред рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдЕрдЬреАрдмред Json.Encoder рдФрд░ Json.Decoder
рдПрд▓реНрдоред рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдЕрдЬреАрдмред Http, рдЯрд╛рд╕реНрдХ


рдПрд▓реНрдо рднрд╛рд╖рд╛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдореБрдЦреНрдп рддрддреНрд╡ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  1. рд░рд╛рдЬреНрдп рдпрд╛ рдореЙрдбрд▓ред рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛;
  2. рдХрдИ рд╡реИрдз рд╕рдВрджреЗрд╢ред рд╕рдВрджреЗрд╢ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдШрдЯрдирд╛рдПрдВ рдШрдЯрд┐рдд рд╣реЛрддреА рд╣реИрдВ (рдорд╛рди рд▓реЗрдВ рдХрд┐ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛;
  3. рдПрдХ рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдирдпрд╛ DOM рдЯреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ;
  4. рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдПрдХ рдореЙрдбрд▓ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рдореЙрдбрд▓ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рднрд╛рд╡ рджреЗрддрд╛ рд╣реИ;
  5. рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдЗрд╡реЗрдВрдЯ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рднрд╛рд╖рд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдЯрд╛рдЗрдорд░, WebSocket рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛рдПрдБ рд╣реИрдВред

рдЯрд╛рдЗрдкрд┐рдВрдЧ


рд╕рдм рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реНрдерд┐рд░ рдХреЛрдб рд╕реНрдерд┐рд░рддрд╛ рдЬрд╛рдБрдЪред рдпрджрд┐ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрд╛ рдирд╣реАрдВ - рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВред рдпрд╣ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред


рдЖрджрд░реНрд╢


рдореЙрдбрд▓ рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рд╣реИред рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


  1. рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рд▓рд┐рдЦреЗрдВ ;
  2. рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕рдВрдШреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ ;
  3. рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ Int, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЕрдиреНрдпред

рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓реЗрдВ:


type User = Anonymous | User String 

рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЙрд╕рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рд╡рд╣ рдЕрдзрд┐рдХреГрдд рд╣реИред рдЕрдиреНрдпрдерд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдирд╛рдо рд╣реИред


рд╕реАрдорд╛


рдПрд▓реНрдо рд░рдирдЯрд╛рдЗрдо рдФрд░ рдбрд┐рдХреЛрдбрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ред рдбрд┐рдХреЛрдбрд░ (Json.Decode) рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ JSON рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрд▓реНрдо рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИред Json.Decode.decodeString рдпрд╛ Json.Decode.decodeValue рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред


рдбрд┐рдХреЛрдбрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рд╕рдлрд▓ рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ред


рдкреНрд░рд╕реНрддреБрддрд┐ (рджреЗрдЦреЗрдВ)


рдПрдХ рджреГрд╢реНрдп рд░рд╛рдЬреНрдп рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ DOM рдЯреНрд░реА рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> Html.div [] [ Html.text тАЬAnonymousтАЭ ] User name -> Html.div [] [ Html.text (тАЬWelcome тАЭ ++ name) ] 

рдбреЛрдо рдиреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреБрджреНрдз рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рджреГрд╢реНрдп рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд░рдЪрдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 view : Model -> Html.Html Msg view model = case model.user of Anonymous -> anonymousView User name -> userView name 

рдЕрдирд╛рдо рджреГрд╢реНрдп рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреГрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред


рдореНрдпреВрдЯреЗрд╢рди (рдЕрдкрдбреЗрдЯ)


рд╕рднреА рдШрдЯрдирд╛рдУрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ, рдиреЗрдЯрд╡рд░реНрдХ, рдЖрджрд┐) рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдкрдВрдЬреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрджреНрдпрддрди рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдИрд╡реЗрдВрдЯ рдФрд░ рдПрдХ рдореЙрдбрд▓ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рдореЙрдбрд▓ рдФрд░ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдХрдорд╛рдВрдб рдХреЛ рдПрд▓реНрдо рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдШрдЯрдирд╛рдПрдБ рднреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ рдЪрд░ рдмрдврд╝рд╛рдирд╛:


 update : Model -> Msg -> (Model, Cmd Msg) update model msg = case msg of OnClick -> ({model | clicked = model.clicked + 1}, Cmd.none) 

рд╕рджрд╕реНрдпрддрд╛ (рд╕рджрд╕реНрдпрддрд╛)


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛ рдФрд░ рдореЙрдбрд▓ рдмрджрд▓рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ред


рдпрджрд┐ рдХреЛрдИ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 10 рд╕реЗрдХрдВрдб рдХреА рдЕрд╡рдзрд┐ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрдорд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ред 10 рд╕реЗрдХрдВрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдПрдХ рдЯрд┐рдХ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 subscribe : Model -> Sub Msg subscribe model = Time.every 10 Tick 

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


Source: https://habr.com/ru/post/hi424215/


All Articles