Feliz: рдлрд╝реЗрд▓рд┐рдЬрд╝ рдХреЛ рдПрдХ рдЕрдореВрд░реНрдд рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рджрд┐рд╕ре░ 2020  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Zaid-Ajaj/Feliz

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

  1. F# UI рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рднрд╛рд╖рд╛ рд╣реИ
  2. рдкреНрд░рддреНрдпреЗрдХ F# рдбреЗрд╡рд▓рдкрд░ рдЬреЛ рд╡реЗрдм рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, UI рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ DSL рд▓рд┐рдЦрддрд╛ рд╣реИ
  3. рд░рд┐рдПрдХреНрдЯ рд╡реЗрдм рдпреВрдЖрдИ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЗрд▓рд┐рдЬ рдПрдХ рдмреЗрд╣рддрд░реАрди рдПрдкреАрдЖрдИ/рдбреАрдПрд╕рдПрд▓ рд╣реИ

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо 3 рд╕реЗ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рд╣рдЯрд╛ рджреЗрдВ? рдпрд╣ рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  • рдлрд╝реЗрд▓рд┐рдЬрд╝ рдПрдХ рдорд╛рдирдХ рдмрди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдКрдкрд░ рджреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ 2 рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдлрд╝реЗрд▓рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗ рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдкрд╛рджрди рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рдпрд╣ #285 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ Fable.React рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рднреА рдмрдЪ рд╕рдХрддрд╛ рд╣реИ (Fable.React рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП IViewElement рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛)
  • рдпрд╣ Fable.React рдХреА рддрд░рд╣ рд╣рд░ рдЬрдЧрд╣ #if FABLE_COMPILER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдлрд╝реЗрд▓рд┐рдЬрд╝ рд░реЗрдВрдбрд░рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рднреА рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕реАрдзреЗ Fable рдореЗрдВ рдлреНрд░рдВрдЯрдПрдВрдб рд░реЗрдВрдбрд░рд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реЛред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл Feliz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗ

рд▓рд┐рдлреНрдЯ рдкрд┐рдЪ рдХреЗ рд╕рд╛рде, рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрджрдо рд╣реИ рддреЛ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорди рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:

type IViewElement = interface end
type IViewProp = interface end

// Later renderers can inherit these interfaces
type ReactElement = inherit IViewElement

// The basic renderer interface contains few methods
type IHTML =
    abstract renderNative: tagName: string * props: IViewProp seq

// Most of the helpers would be extensions to the interface
type IHTML with
    member this.div(props: IViewProp seq) = this.renderNative("div", props)
    ...

// Then we have different implementations
module Feliz.React

type ReactHTML() =
    interface IHTML with
        member _.RenderNative(tag, props, children) = ...

let Html = Feliz.ReactHTML()

// Consumer code
open Feliz.React

Html.div [...]

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╢рд╛рдпрдж рд╣рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

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

@alfonsogarciacaro рдпрд╣ рдЕрджреНрднреБрдд рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ #262 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Fable.React рд╕реЗ Feliz рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ 'рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ' SSR рд╣реИред Feliz рдФрд░ Feliz.ViewEngine рджреЛрдиреЛрдВ рд╣реА рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХрд╛ рдХреЛрдИ рднреА рдЯреБрдХрдбрд╝рд╛ рдЬреЛ ifdefs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ ifdefs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрд▓реЛ рдмрдирд╛рдирд╛, рдбреЙрдЯрдиреЗрдЯ- рдХреЗрд╡рд▓ рдФрд░ рджреЛрдиреЛрдВ-рджреБрдирд┐рдпрд╛-рдХреЛрдбред рдХреБрдЫ рднреА рдЬреЛ рдЙрд╕ рдЕрдВрддрд░ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлреЗрд▓рд┐рдЬ рдФрд░ .Net рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬреАрд╡рди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред

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

рд╣рд╛рдп @alfonsogarciacaro , рдЖрдкрдХреЗ рд╕рд╛рде рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдЖрдЗрдП Fable рдореЗрдВ HTML рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ API рдмрдирд╛рдПрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рдХрд╛рд░рдг рдмрддрд╛рдП рдЧрдП рд╣реИрдВ:

  • рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдорд╛рдирдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╣реА рд░рд╛рдп рд╣реИред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЕрднреА рднреА рдкреВрд░реА рдПрдХрд▓ рд╕реВрдЪреА рдФрд░ prop.children рдЪреАрдЬрд╝ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИред
  • рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ "рд╕рд░рд▓" рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ: рдЗрд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдлреЗрд▓рд┐рдЬ-рд╢реИрд▓реА рдПрдкреАрдЖрдИ рд▓рд┐рдЦрдиреЗ/рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдпрдж рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред
  • рдореИрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкрддрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдПрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЯреВрд▓рд┐рдВрдЧ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛: рдлрд╝реЗрд▓рд┐рдЬрд╝ "рдХрд┐рдпрд╛" рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдирдореВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдмреЗрд╣рддрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╣рд╛рдиреА рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред

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

BTW, рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдХреБрдЫ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/alfonsogarciacaro/Feliz.Engine/blob/main/src/HtmlEngine.fs

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕рднреА unbox рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд╛рд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд░реЗрдВрдбрд░рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ @dbrattli Feliz.ViewEngine рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ SSR рдХреЛ Feliz рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ/рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

IntelliSense

рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдлрдВрдХреА рджрд┐рдЦреЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ Html рдХреЛ рдлреЗрд▓рд┐рдЬ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

let Html = HtmlEngine(renderer)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдорд╛рдореВрд▓реА рдорд╕рд▓рд╛ рдЬреНрдпрд╛рджрд╛ рд╣реИред

рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░

рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реЛ рдЬреИрд╕рд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ (рдпрд╛ рдмреЗрд╣рддрд░)ред рд╢рд╛рдпрдж Feliz.HtmlEngine рдореЗрдВ рдПрдХ рдкреНрд▓рдЧрдЗрди рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ Fable рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛ рджреЗрдЧрд╛ред

рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп

SSR рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ Feliz.Bulma / Feliz.Bulma.ViewEngine ) рдХреЛ рддрдм рддрдХ рд╕рдорд╛рдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рднреА рд╕рдорд╛рдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ рдЬреЛ рдпрд╣ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЗрдЪреНрдЫрд┐рдд рдкрд╣рд▓реЗ рдкреЗрдВрдЯ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдПрд╕рдПрд╕рдЖрд░ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .NET рдХреЗ рд▓рд┐рдП ReactDOMServer рдЬреИрд╕рд╛ рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рддрдХ рдирд╣реАрдВ рдЦреЛрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ React.NET (рд╢рд╛рдпрдж рдПрдХ рдПрдл # рд░реИрдкрд░ рдХреЗ рд╕рд╛рде) рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛?

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @Shmew рдФрд░ рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ:

  • рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ : рд╣рдореНрдо, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╕рд╛рд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрд╛ рдерд╛ рд▓реЗрдХрд┐рди рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦреАред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдПрдХ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореБрдЦреНрдп рджреЛрд╖ рд╢рд╛рдпрдж рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ open type рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░ : рдореБрдЭреЗ рдЗрд╕реЗ рднреА рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реА рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдлреИрдмрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреЗрдбрд╝ рд╣рд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЫреЛрдЯрд╛ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛, рдЬрд┐рддрдирд╛ рдЕрдм #284 . рдХреЗ рдмрд╛рдж рд╣реИ
  • рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп : рд╣рд╛рдВ, рдЕрдореВрд░реНрдд рдПрдкреАрдЖрдИ рд╕реЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдиреНрдпреВрдирддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рдеред
  • рд╡рд┐рдХрд▓реНрдк : рдЯреАрдмреАрдПрдЪ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрд╕рдПрд╕рдЖрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлреИрдмрд▓ рдореЗрдВ (рдпреЛрдЧрджрд╛рди) рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреИрдЧ рдореЗрдВ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛) рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ React.NET рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреЗрд▓рд┐рдЬ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлреЗрд▓рд┐рдЬ рдореЗрдВ рдлреИрдмрд▓ рдЯреНрд░рд┐рдХреНрд╕ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд╕реНрдЯ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ .NET рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВрдЧреЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рди рдХреЗрд╡рд▓ SSR рдореЗрдВ рдмрд▓реНрдХрд┐ _beyond React_:wink: рдореЗрдВ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП F# рд╕рд░реНрд╡рд░ рдореЗрдВ html рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдЕрдиреНрдп рд░реЗрдВрдбрд░рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЕрдЧреНрд░рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @Shmew рдФрд░ рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдФрд░ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ!

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рд╕реБрдкрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред Intellisense рдареАрдХ рд╣реИ, рдмрд▓реНрдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Html рдПрдХ рдЕрд▓рдЧ рд░рдВрдЧ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдореВрд▓реА ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо open type рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЦреЛ рджреЗрддреЗ рд╣реИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

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

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

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

рдЗрд╕рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк: рдЯреАрдмреАрдПрдЪ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрд╕рдПрд╕рдЖрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлреИрдмрд▓ рдореЗрдВ (рдпреЛрдЧрджрд╛рди) рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреИрдЧ рдореЗрдВ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛) рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ React.NET рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреЗрд▓рд┐рдЬ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлреЗрд▓рд┐рдЬ рдореЗрдВ рдлреИрдмрд▓ рдЯреНрд░рд┐рдХреНрд╕ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд╕реНрдЯ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ .NET рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВрдЧреЗред

рд╣рд╛рдБ, рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк Feliz.MaterialUI рдореЗрдВ рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд░рд┐рдПрдХреНрдЯ рдПрд╕рдПрд╕рдЖрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдереВрдХрдиреЗ рдХреЗ рд▓рд┐рдП ReactDOMServer рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреГрд╖реНрда рдХрд╛ рдкрд╣рд▓рд╛ рдкреЗрдВрдЯ рд╣реИред рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ React.NET рдареАрдХ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝реЗрд▓рд┐рдЬрд╝ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

Fable compiles F# React 
-> node.js process imports and returns html string 
-> web server caches output 
-> web server serves page

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░реЗ

рдпрд╣ рдПрдХ рдорд╣рд╛рди рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдореИрдВ рд╢реБрджреНрдз HTML рдХреЛ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк рдореЗрд░реА рдкреНрд░рдЧрддрд┐ рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/alfonsogarciacaro/Feliz.Engine

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

  1. рдЗрд╕реЗ рдЕрдиреНрдп рдлреНрд░рдВрдЯрдПрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рд╕реБрддрд┐рд▓: https://github.com/davedawkins/Sutil/pull/15
  2. SASS рдХреЗ рдмрдЬрд╛рдп CSS рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: https://github.com/alfonsogarciacaro/Feliz.Engine/blob/main/samples/Feliz.Css/Feliz.Css.fs
  3. рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ: https://github.com/alfonsogarciacaro/Feliz.Engine/blob/main/samples/Feliz.StaticHtml/Feliz.StaticHtml.fs
  4. Snabbdom рдЬреИрд╕реЗ рдЕрдиреНрдп рд╡рд░реНрдЪреБрдЕрд▓-рдбреЛрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: https://github.com/alfonsogarciacaro/Feliz.Engine/blob/main/samples/Feliz.Snabbdom/Feliz.Snabbdom.fs

рдпреЗ рд╕рднреА рдорд╕реМрджреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдХрдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдкреНрд░рд▓реЗрдЦрд┐рдд рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рднреА рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдмреБрд▓реНрдорд╛рдЗрдВрдЬрд┐рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрди рд╕рднреА (рдФрд░ рднрд╡рд┐рд╖реНрдп) рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред 2 рдФрд░ 3 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ Fable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди .NET рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ рд▓реЗрдХрд┐рди Feliz.Engine .NET рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ (рдореИрдВрдиреЗ рд╕рднреА unbox рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВ) рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрдиреНрд╣реЗрдВ F# .NET рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ HTML рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдзрд┐рдХ рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ @ рдЬреИрдж-рдЕрдЬрд╛рдЬ? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрддрдорд╛рди рдлреЗрд▓рд┐рдЬ рд░рд┐рдПрдХреНрдЯ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ "рдлреЗрд▓рд┐рдЬ рдкрд░рд┐рд╡рд╛рд░" (рд╢рд╛рдпрдж рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЖрдк рдирд╛рдо рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ, рдпрд╛ рдЖрдк рдХреБрдЫ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ?

рд╣рд╛рдп @alfonsogarciacaro , рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХрднреА-рдХрднреА рдЗрди рдирдореВрдиреЛрдВ рдореЗрдВ рдПрдХ рдЧрд╣рд░рд╛ рдЧреЛрддрд╛

рдирдорд╕реНрддреЗ,

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

рд╣рд╛рдВ, рдПрдХ рдкреНрд░рднрд╛рд╡ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИ :) рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдордзреНрдпрдо-рдмрдбрд╝реЗ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдлреБрд▓рдорд╛-рдбреЗрдореЛ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╝реЗрд▓рд┐рдЬрд╝ рд╣реЗрд▓реНрдкрд░реНрд╕ рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЕрднреА, рдлрд╝реЗрд▓рд┐рдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд JSX рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ .createElement("div") рдЬреИрд╕реА рдХрдИ рдХреЙрд▓реЛрдВ рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ gzip рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рдХреЙрд▓)ред

рд╣рд╛рдБ, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдЕрджреНрднреБрдд рдПрдкреАрдЖрдИ/рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдЧрд╛ред рдореЗрд░реА рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдХреБрдЫ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдореБрджреНрджреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рдп @alfonsogarciacaro , рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдирдЬрд╝рд░

  • CssEngine CSS рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИ, рдХреЗрд╡рд▓ CSS/SASS рдЯреВрд▓рдЪреЗрди рдпрд╛ CSS-in-JS рдЬреИрд╕реЗ рдлрд╝реЗрд▓рд┐рдЬрд╝ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдпрд╛ FSS рдпрд╛ рдЗрдореЛрд╢рди рдЬреИрд╕реЗ рдЕрдиреНрдп CSS-in-JS libs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрддред рдПрдл # рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдлреЗрд▓рд┐рдЬ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореМрдЬреВрджрд╛ рдЯреВрд▓рдЪреЗрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ (рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ Fable/F # рдХрдВрдкрд╛рдЗрд▓рд░ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рдП рддреЛ рднреА рддреЗрдЬрд╝ рд╕рдВрдХрд▓рди рд╕рдордп рд╣реЛрдЧрд╛ рд╡рд┐рд╢рд╛рд▓ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ Feliz/React рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ
  • рд╕реНрдерд┐рд░ html рдЗрдВрдЬрди: рдлрд╝реЗрд▓рд┐рдЬрд╝ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЛрдб рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ ReactDOM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ html рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред Feliz.ViewEngine рдбреЙрдЯрдиреЗрдЯ рдореЗрдВ рд╕реНрдерд┐рд░ HTML рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдЪреБрдиреМрддрд┐рдпреЛрдВ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @ рд╢рдореВ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ: рддреАрд╕рд░реЗ-рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рджреЛрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдл рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдлрд╝реЗрд▓рд┐рдЬрд╝ рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред
  • Snabbdom рдЗрдВрдЬрди: рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдХреА рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред

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

рдирдореВрдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @ рдЬреИрдж-рдЕрдЬрд╛рдЬ! рдореИрдВ рдЖрдкрдХреА рдИрдорд╛рдирджрд╛рд░реА рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред Feliz.Engine рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди/рдХрдард┐рди рдерд╛ (рдореБрджреНрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗрд╡рд▓ 50 рд▓рд╛рдЗрдиреЗрдВ рд╣реИ) рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкреНрд░рд┐рдВрдЯрд░ рдХреЗрд╡рд▓ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдереЗред рдореИрдВрдиреЗ Fable & рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди "рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ" рдЗрд╕реЗ .net рдкрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Snabbdom рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдорддрд▓рдм рдПрдХ рдФрд░ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рднреА рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ :)

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

@alfonsogarciacaro рдпрд╣ рдЕрджреНрднреБрдд рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ #262 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Fable.React рд╕реЗ Feliz рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ 'рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ' SSR рд╣реИред Feliz рдФрд░ Feliz.ViewEngine рджреЛрдиреЛрдВ рд╣реА рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХрд╛ рдХреЛрдИ рднреА рдЯреБрдХрдбрд╝рд╛ рдЬреЛ ifdefs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ ifdefs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрд▓реЛ рдмрдирд╛рдирд╛, рдбреЙрдЯрдиреЗрдЯ- рдХреЗрд╡рд▓ рдФрд░ рджреЛрдиреЛрдВ-рджреБрдирд┐рдпрд╛-рдХреЛрдбред рдХреБрдЫ рднреА рдЬреЛ рдЙрд╕ рдЕрдВрддрд░ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлреЗрд▓рд┐рдЬ рдФрд░ .Net рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬреАрд╡рди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред

рд╣рд╛рдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ Feliz.Engine рдореЗрдВ Feliz рдХреЗ рд╕рд╛рде рдХреБрдЫ рдорддрднреЗрдж рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ Feliz.Engine React рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ Feliz рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░реЗрдЧрд╛, рдХреБрдЫ рдРрд╕рд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдЯрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ;) рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд╕рдорд╛рдзрд╛рдиред

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

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

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

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

alfonsogarciacaro picture alfonsogarciacaro  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

7sharp9 picture 7sharp9  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ