Feliz: рдкреНрд░рд╢реНрди: Happy.ElmishComponents vs Happy.UseElmish

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЕрдХреНрддреВре░ 2020  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Zaid-Ajaj/Feliz

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрдд, рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдХреБрдЫ рдордВрджрдмреБрджреНрдзрд┐ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓реЗрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдореИрдВ

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рджреВрд╕рд░реЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреЛ рдЪреБрдиреЗрдВрдЧреЗ? рдореБрдЭреЗ Feliz.UseElmish рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдбрд░ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рднреА рдХреВрд▓рд░ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ

рд╣рд╛рдп рд░реЛрдорди, рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓!

рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХреЛрдбреА рдЬреИрд╕рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Feliz.UseElmish рдХреЛ Feliz.ElmishComponents рдкреВрд░реНрдг рдШрдЯрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реБрдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреВрд░реА рдХрд╣рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Feliz.UseElmish рднреА _рд╣реБрдХ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕_ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдкреБрди: рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдЬреЛ Feliz.ElmishComponents рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ

Feliz.UseElmish рдХреЛ рдЙрд╕реА рдШрдЯрдХ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдЬреИрд╕реЗ рдЕрдиреНрдп рд╣реБрдХ рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

"рдкреБрдирдГ рдЖрд░рдВрднреАрдХрд░рдг" рд╕реЗ рдореЗрд░рд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдареАрдХ рд╣реИ, рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк URL рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдШрдЯрдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

#/user=profile/{userId} -> UserProfile { UserId = userId }

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЬрдм рдЗрдирдкреБрдЯ UserId рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо UserProfile рдШрдЯрдХ (рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП init рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛) рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

type UserProfileProps = { UserId : int }

let UserProfile = React.functionComponent("UserProfile", fun (props: UserProfileProps) -> 
  let state, dispatch = React.useElmish(init props.UserId, update, [| props.UserId |])
  Html.h1 (sprintf "UserProfile(UserId=%d)" props.UserId)
)

// later on application  entry: 

React.router [
  router.onUrlChange (parseUrl >> UrlChanged >> dispatch) 
  router.children [
     match state.CurrentUrl with
     | [ "user-profile"; Route.Int userId ] -> UserProfile { UserId = userId }
     | _ -> Html.h1 "Not found" 
  ]
]

рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА [| props.UserId |] рдХреЛ рд╣реБрдХ (рд╣реБрдХ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рддрд░реНрдХ) рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдШрдЯрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрд╛рдЬрд╝рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрд▓реНрдорд┐рд╢ рдкреНрд░реЗрд╖рдг рд▓реВрдк рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП init рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ init рдЗрдирдкреБрдЯ props.UserId рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдерд╛,

рдЬрдм рди рддреЛ init рдФрд░ рди рд╣реА update рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШрдЯрдХ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

let state, dispatch = React.useElmish(init, update, [| |])

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

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

рдЕрдВрддрд┐рдо рдЯрд┐рдк: Feliz.UseElmish рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рдПрд▓реНрдорд┐рд╢ рдкреНрд░реЗрд╖рдг рд▓реВрдк рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рдПрд▓реНрдорд┐рд╢ рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдкрдХреЗ рдШрдЯрдХ рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд░рд╛рдЬреНрдп рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рд░рд╛рдЬреНрдп рдХреЗ рдЭрдВрдбреЗ рдЪрд╛рд╣рд┐рдП? рдлрд┐рд░ React.useState рд╕рд╛рде рдХреБрдЫ рд░рд╛рдЬреНрдп рдЪрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдФрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рддрдм React.useDeferred рдЪрд╛рд▓ рдЪрд▓ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЬрдЯрд┐рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП Feliz.UseElmish рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдШрдЯрдирд╛рдПрдВ рдФрд░ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдмрд╛рддрдЪреАрдд рд╣реЛрддреА рд╣реИред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдХреЛрдбрд╝реА !!! рддреЛ рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЕрднреА Feliz.UseElmish рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред

рд╣рд╛рдБ, рд▓реЛрдЧреЛрдВ рдХреЛ рди рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА Feliz.ElmishComponents ред рдЖрдк рдЗрд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрддрдо! рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

рдпрджрд┐ рдЗрд╕реЗ "рдмрд╣рд┐рд╖реНрдХреГрдд" рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ "рдЕрдкреНрд░рдЪрд▓рд┐рдд" рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрд╢рдВрд╕рд┐рдд API рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рд╣рд╛рдВ, рд╣рдо рд╕рд┐рд░реНрдл рдПрдл # рдЯреАрдо рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде)

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ - https://github.com/Zaid-Ajaj/Feliz/pull/264

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рджреВрд╕рд░реЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреЛ рдЪреБрдиреЗрдВрдЧреЗ? рдореБрдЭреЗ Feliz.UseElmish рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдбрд░ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рднреА рдХреВрд▓рд░ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ

рд╣рд╛рдп рд░реЛрдорди, рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓!

рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХреЛрдбреА рдЬреИрд╕рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Feliz.UseElmish рдХреЛ Feliz.ElmishComponents рдкреВрд░реНрдг рдШрдЯрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реБрдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреВрд░реА рдХрд╣рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Feliz.UseElmish рднреА _рд╣реБрдХ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕_ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдкреБрди: рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдЬреЛ Feliz.ElmishComponents рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ

Feliz.UseElmish рдХреЛ рдЙрд╕реА рдШрдЯрдХ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдЬреИрд╕реЗ рдЕрдиреНрдп рд╣реБрдХ рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

"рдкреБрдирдГ рдЖрд░рдВрднреАрдХрд░рдг" рд╕реЗ рдореЗрд░рд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдареАрдХ рд╣реИ, рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк URL рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдШрдЯрдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

#/user=profile/{userId} -> UserProfile { UserId = userId }

рдореВрд▓ рд░реВрдк рд╕реЗ, рдЬрдм рдЗрдирдкреБрдЯ UserId рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо UserProfile рдШрдЯрдХ (рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП init рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛) рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

type UserProfileProps = { UserId : int }

let UserProfile = React.functionComponent("UserProfile", fun (props: UserProfileProps) -> 
  let state, dispatch = React.useElmish(init props.UserId, update, [| props.UserId |])
  Html.h1 (sprintf "UserProfile(UserId=%d)" props.UserId)
)

// later on application  entry: 

React.router [
  router.onUrlChange (parseUrl >> UrlChanged >> dispatch) 
  router.children [
     match state.CurrentUrl with
     | [ "user-profile"; Route.Int userId ] -> UserProfile { UserId = userId }
     | _ -> Html.h1 "Not found" 
  ]
]

рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА [| props.UserId |] рдХреЛ рд╣реБрдХ (рд╣реБрдХ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рддрд░реНрдХ) рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдШрдЯрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрд╛рдЬрд╝рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрд▓реНрдорд┐рд╢ рдкреНрд░реЗрд╖рдг рд▓реВрдк рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП init рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ init рдЗрдирдкреБрдЯ props.UserId рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдерд╛,

рдЬрдм рди рддреЛ init рдФрд░ рди рд╣реА update рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШрдЯрдХ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрднрд░рддрд╛ рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

let state, dispatch = React.useElmish(init, update, [| |])

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

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

рдЕрдВрддрд┐рдо рдЯрд┐рдк: Feliz.UseElmish рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рдПрд▓реНрдорд┐рд╢ рдкреНрд░реЗрд╖рдг рд▓реВрдк рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рдПрд▓реНрдорд┐рд╢ рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдкрдХреЗ рдШрдЯрдХ рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд░рд╛рдЬреНрдп рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рд░рд╛рдЬреНрдп рдХреЗ рдЭрдВрдбреЗ рдЪрд╛рд╣рд┐рдП? рдлрд┐рд░ React.useState рд╕рд╛рде рдХреБрдЫ рд░рд╛рдЬреНрдп рдЪрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдФрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рддрдм React.useDeferred рдЪрд╛рд▓ рдЪрд▓ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЬрдЯрд┐рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП Feliz.UseElmish рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдШрдЯрдирд╛рдПрдВ рдФрд░ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдмрд╛рддрдЪреАрдд рд╣реЛрддреА рд╣реИред

рд╡рд╛рд╣, рдареЗрда рдЬрд╝реИрдж рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рддреБрдореНрд╣реЗрдВ рд╡реЛ рдмрд╛рддреЗрдВ рд╕рд┐рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛рд░! рдореИрдВ рдЕрдВрдд рдореЗрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж! тЭдя╕П

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Dzoukr picture Dzoukr  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cmeeren picture cmeeren  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

l3m picture l3m  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Dzoukr picture Dzoukr  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

theimowski picture theimowski  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ