рд╣рдо рдПрд▓реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реЗ рдПрдордПрд╕рдЬреА рдХреЗ рд╕рд╛рде рд▓рдбрд╝рддреЗ рд╣реИрдВ

рдПрд▓реНрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВред рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЖрдк 700 рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде update рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реМ рдмрд┐рд▓реНрдбрд░реЛрдВ рдФрд░ Model рд╕рд╛рде Msg , рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд╕реАрдЦрдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрдХрдиреАрдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдЧреАред


рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдВред рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


 type alias Model = { name : String } view : Model -> Html Msg view model = div [] [ input [ placeholder "Name", value model.name, onInput ChangeName ] [] ] type Msg = ChangeName String update : Msg -> Model -> Model update msg model = case msg of ChangeName newName -> { model | name = newName } 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдЕрдВрддрд┐рдо рдирд╛рдо, "рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ" рдФрд░ "рд╕рд╣реЗрдЬреЗрдВ" рдмрдЯрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкрд░ рдХрдорд┐рдЯ рдХрд░реЗрдВ ред


 type alias Model = { name : String , surname : String , bio : String } view : Model -> Html Msg view model = div [] [ input [ placeholder "Name", value model.name, onInput ChangeName ] [] , br [] [] , input [ placeholder "Surname", value model.surname, onInput ChangeSurname ] [] , br [] [] , textarea [ placeholder "Bio", onInput ChangeBio, value model.bio ] [] , br [] [] , button [ onClick Save ] [ text "Save" ] ] type Msg = ChangeName String | ChangeSurname String | ChangeBio String | Save update : Msg -> Model -> Model update msg model = case msg of ChangeName newName -> { model | name = newName } ChangeSurname newSurname -> { model | surname = newSurname } ChangeBio newBio -> { model | bio = newBio } Save -> ... 

рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ, рд╕рдм рдареАрдХ рд╣реИред


рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓рддрд╛ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдкреЗрдЬ рдореЗрдВ рдПрдХ рдФрд░ рдШрдЯрдХ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рдПрдХ - рдХреБрддреНрддреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдХрдорд┐рдЯ ред


 type Msg = ChangeName String | ChangeSurname String | ChangeBio String | Save | ChangeDogName String | ChangeBreed String | ChangeDogBio String | SaveDog update : Msg -> Model -> Model update msg model = case msg of ChangeName newName -> { model | name = newName } ChangeSurname newSurname -> { model | surname = newSurname } ChangeBio newBio -> { model | bio = newBio } Save -> ... ChangeDogName newName -> { model | dogName = newName } ChangeBreed newBreed -> { model | breed = newBreed } ChangeDogBio newBio -> { model | dogBio = newBio } SaveDog -> ... 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Msg рдореЗрдВ Msg рджреЛ "рд╕рдореВрд╣" рд╣реИрдВред рдореЗрд░реЗ "рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдлреНрд▓реЗрдпрд░" рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 5 рдФрд░ рдШрдЯрдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЙрдкрдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕ рдХреЛрдб рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред


рдХреНрдпрд╛ рд╣рдо рдЕрдореВрд░реНрддрддрд╛ рдХреА рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдмреЗрд╢рдХ !


 type Msg = HoomanEvent HoomanMsg | DoggoEvent DoggoMsg type HoomanMsg = ChangeHoomanName String | ChangeHoomanSurname String | ChangeHoomanBio String | SaveHooman type DoggoMsg = ChangeDogName String | ChangeDogBreed String | ChangeDogBio String | SaveDog update : Msg -> Model -> Model update msg model = case msg of HoomanEvent hoomanMsg -> updateHooman hoomanMsg model DoggoEvent doggoMsg -> updateDoggo doggoMsg model updateHooman : HoomanMsg -> Model -> Model updateHooman msg model = case msg of ChangeHoomanName newName -> { model | name = newName } -- Code skipped -- updateDoggo : DoggoMsg -> Model -> Model -- Code skipped -- view : Model -> Html Msg view model = div [] [ h3 [] [ text "Hooman" ] , input [ placeholder "Name", value model.name, onInput (HoomanEvent << ChangeHoomanName) ] [] , -- Code skipped -- , button [ onClick (HoomanEvent SaveHooman) ] [ text "Save" ] , h3 [] [ text "Doggo" ] , input [ placeholder "Name", value model.dogName, onInput (DoggoEvent << ChangeDogName) ] [] , -- Code skipped -- ] 

рдПрд▓реНрдо рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдорд╛рдирд╡ рдФрд░ рдХреБрддреНрддреЗред рдЕрдм рдЗрд╕ рдХреЛрдб рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рджрд╣рд▓реАрдЬ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧреАред рдЬреИрд╕реЗ рд╣реА рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡рд╣ рддреБрд░рдВрдд рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬреЛ рдХреЛрдб рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреБрддреНрддреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рддрд┐рдзрд╛рд░рдг рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЙрди рдкрд░ рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░реЗрдВред


рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рдВрджрд░реНрдн рд╣реИред рдЖрдк рдЙрди рдЬрд╛рдирдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реИ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ (Msg рдФрд░ рдореЙрдбрд▓) рджреНрд╡рд╛рд░рд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдиреБрднрд╛рдЧреЛрдВ рдФрд░ рдЙрдкрдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж рд╣реАред


рдирд┐рд╖реНрдХрд░реНрд╖


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


рдЖрдкрдХреЗ рд╕рдордп рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдШрдВрдЯрд╛ (рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ 20 рдорд┐рдирдЯ рд╕реЗ рдХрдо рд╕рдордп рдмрд┐рддрд╛рдпрд╛) рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЙрд╕ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реА рддрдХрдиреАрдХ рдХреЛ Model рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореЙрдбрд▓ рдХреЛ рдХреЗрд╡рд▓ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Doggo рдФрд░ Doggo , рдореЙрдбрд▓ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЛ рддрдХ рдХрдо рдХрд░рдирд╛ред


рднрдЧрд╡рд╛рди рдПрд▓реНрдо рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред


рдпрджрд┐ рдЖрдк рдЕрдВрддрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде PS рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ

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


All Articles