ΠΡΠΈΠ²Π΅Ρ, Π΄ΡΡΠ³, Ρ Π΄Π°Π²Π½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΠ» ΡΠ΅Π±Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΡΡΡΠ°Π»ΡΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π΄ΡΠ±Π»Ρ. π
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΠΏΠΈΡΠ°ΡΡ, Π² ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Feliz.ElmishComponents
ΠΈ Feliz.UseElmish
? Π― Π²ΠΈΠΆΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ React, ΠΈΠΌΠ΅ΡΡΠΈΠΌ ΡΠ°ΡΡΠΈ Elmish MVU. ΠΡΡΡ Π»ΠΈ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π²Ρ Π±Ρ Π²ΡΠ±ΡΠ°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ? ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΡΠΎΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Feliz.UseElmish
ΠΈ Ρ ΠΏΡΠΎΡΡΠΎ Π±ΠΎΡΡΡ, ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ½Π΅ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ. π
ΠΡΠ°ΠΊ, Feliz.ElmishComponents
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ Feliz.UseElmish
. ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Feliz.ElmishComponents
Π±ΡΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π» ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π»ΠΎΠ²ΡΡΠΊΡ. Π’Π°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Feliz.UseElmish
. ΠΡΠ°ΠΊ, ΡΠ΅ΠΏΠ΅ΡΡ Feliz.ElmishComponents
- ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ Π»ΠΎΠ²ΡΡΠΊΡ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Feliz.ElmishComponents
Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½
ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΠΠΎΠ΄ΠΈ !!! Π’Π°ΠΊ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΠ», Feliz.UseElmish
ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ°, Ρ Π½Π°Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ Feliz.ElmishComponents
ΡΡΠΎΠ±Ρ Π½Π΅ Π»ΠΎΠΌΠ°ΡΡ Π»ΡΠ΄Π΅ΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ.
ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ! ΠΡΠ΅ ΡΠ°Π· ΡΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΡΠ»ΠΈ ΠΎΠ½ Β«ΡΡΡΠ°ΡΠ΅Π»Β», Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ Β«ObseleteΒ» ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π»ΡΠ΄Π΅ΠΉ Π½Π° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ API.
Π§ΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅?
ΠΠ°, ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ F #, ΡΡΠΎ Π½Π°ΠΌ ΡΡΠΎΠΈΡ ΠΏΠΈΠ°ΡΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ)
Π₯ΠΎΡΠΎΡΠΎ, Ρ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ Π·Π΄Π΅ΡΡ - https://github.com/Zaid-Ajaj/Feliz/pull/264
ΠΡΡΡ Π»ΠΈ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π±Ρ Π²ΡΠ±ΡΠ°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ? ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΡΠΎΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Feliz.UseElmish, ΠΈ Ρ ΠΏΡΠΎΡΡΠΎ Π±ΠΎΡΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π·Π΄Π΅ΡΡ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ. π
ΠΡΠΈΠ²Π΅Ρ, Π ΠΎΠΌΠ°Π½, Ρ ΠΎΡΠΎΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ!
Π Π°Π·Π½ΠΈΡΠ°, ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΠΠΎΠ΄ΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Feliz.UseElmish
Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ
ΡΠΊΠΎΠ², Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Feliz.ElmishComponents
.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Feliz.UseElmish
ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ _hook semantics_, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ
ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Feliz.ElmishComponents
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ»Π° Ρ
Π°ΠΊΠ΅ΡΡΠΊΠΎΠΉ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΡΡ
ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈΠ· Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
, yikes!
Feliz.UseElmish
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Ρ
ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅.
Π§ΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΠΏΠΎΠ΄ Β«ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉΒ»? Π§ΡΠΎ ΠΆ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ URL ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#/user=profile/{userId} -> UserProfile { UserId = userId }
ΠΠΎ ΡΡΡΠΈ, ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ UserProfile
(Π²ΡΠ·ΡΠ²Π°Ρ init
Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ) ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π° UserId
:
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
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ Elmish ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ Elmish-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΡΡΡ. ΠΠ°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠ°ΡΠ° Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ»Π°Π³ΠΎΠ²? Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Ρ React.useState
. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π· Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ? Π’ΠΎΠ³Π΄Π° React.useDeferred
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ. Π― Π²ΡΠ±Π΅ΡΡ Feliz.UseElmish Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΡΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ°Ρ, ΡΠΈΠΏΠΈΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΠ°ΠΉΠ΄Π°. π Π’Π΅Π±Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ ΡΡΠΈΡΡ ΡΡΠΈΠΌ Π²Π΅ΡΠ°ΠΌ, ΡΡΠ²Π°ΠΊ! Π― Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ½ΡΡΡ. ΠΡΠ΅ ΡΠ°Π· ΡΠΏΠ°ΡΠΈΠ±ΠΎ! β€οΈ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ, Π ΠΎΠΌΠ°Π½, Ρ ΠΎΡΠΎΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ!
Π Π°Π·Π½ΠΈΡΠ°, ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΠΠΎΠ΄ΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ
Feliz.UseElmish
Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ ΡΠΊΠΎΠ², Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈFeliz.ElmishComponents
.ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ
Feliz.UseElmish
ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ _hook semantics_, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡFeliz.ElmishComponents
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ»Π° Ρ Π°ΠΊΠ΅ΡΡΠΊΠΎΠΉ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , yikes!Feliz.UseElmish
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Ρ ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅.Π§ΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΠΏΠΎΠ΄ Β«ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉΒ»? Π§ΡΠΎ ΠΆ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ URL ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎ ΡΡΡΠΈ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
UserProfile
(Π²ΡΠ·ΡΠ²Π°Ρinit
Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ) ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π°UserId
:ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
[| props.UserId |]
Π΄Π»Ρ Π»ΠΎΠ²ΡΡΠΊΠΈ (ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π»ΠΎΠ²ΡΡΠΊΠΈ), ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ ΠΈ ΡΠ½ΠΎΠ²Π° Π²ΡΠ·ΠΎΠ²Π΅Ρinit
ΡΡΠΎΠ±Ρ ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠΈΠΊΠ» Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΠ»ΠΌΠΈΡΠ°. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎinit
Π±ΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π²Π²ΠΎΠ΄Π°props.UserId
ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π΅ ΡΠ½ΠΎΠ²Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ.ΠΠΎΠ³Π΄Π° Π½ΠΈ
init
Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΡupdate
ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ:ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π²ΠΎ Π²Π²ΠΎΠ΄Π΅ ΠΈΠ·Π²Π½Π΅, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π²ΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²ΡΠΊΠ½ΡΡΡ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΌΡΡΠ», ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ ΡΠΈΡΠ°ΠΉΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π£ΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ ΡΠΊΠΎΠ².
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΎΠ²Π΅Ρ:
Feliz.UseElmish
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ Elmish ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ Elmish-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΡΡΡ. ΠΠ°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠ°ΡΠ° Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ»Π°Π³ΠΎΠ²? Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡReact.useState
. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π· Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ? Π’ΠΎΠ³Π΄Π°React.useDeferred
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ. Π― Π²ΡΠ±Π΅ΡΡ Feliz.UseElmish Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.