์ ๋ ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ฅผ ์ ์ํ๋ ค๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ต์ข ์ฌ์ฉ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ง ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ค์ ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ ๋ณ๊ฒฝ์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
3์์ "React"๋ฅผ ์ ๊ฑฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๋ ๊ฒ ํ๋ฉด ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
#if FABLE_COMPILER
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์๋ฒ์ธก 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 , ์์งํ ๋งํด์ ์ ๋ ์ด๊ฒ์ด ์ข์ ์๊ฐ์ด๋ผ๊ณ _๊ธฐ์ต_ํ์ง ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก๋ ์ดํด๊ฐ ๋ฉ๋๋ค. Fable์์ HTML์ฉ ํ์ค API๋ฅผ ๊ตฌ์ถํด ๋ณด๊ฒ ์ต๋๋ค. ์ค์ ๋ก๋ ์ ๋ฒ์ญ๋์ง ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ด์ ์ ๋๋ค.
prop.children
์ข์ํ์ง ์์ต๋๋ค. ๋ฌผ๋ก ์์ ํ ๊ด์ฐฎ์ต๋๋ค.@Zaid ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๋น์ ์ ์ถ๋ก ์ ์ดํดํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฒฝ์ํ๋ DSL์ด ๋๋ฌด ๋ง๋ค๋ ๊ฒ์ด ์ฌ์ ํ ์ ๊ฐ์ด์ง๋ง ๋น์ ์ด ๋งํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฅธ ์๋ฃจ์ ์ด ์์ ์๋ ์์ต๋๋ค. ์๊ฐ์ด ๋๋ค๋ฉด ํ๋กํ ํ์ ์ ์์ฑํ์ฌ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค.
BTW, ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์์ ์ ์์ํ์ต๋๋ค. https://github.com/alfonsogarciacaro/Feliz.Engine/blob/main/src/HtmlEngine.fs
๋๋ ๊ทธ๊ฒ์ ํ
์คํธํ์ง ์์์ง๋ง ๋ชจ๋ unbox
๋ฐ ์ ์ฌํ ํธ๋ฆญ์ ์ ๊ฑฐํ์ผ๋ฏ๋ก ์์น์ ์ผ๋ก ์ด ์ธํฐํ์ด์ค ๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ๋ ๋๋ฌ์ "์๋ํด์ผ" ํฉ๋๋ค. ์๋ฅผ ๋ค์ด React ๋ ๋๋ฌ๋ฅผ @dbrattli Feliz.ViewEngine๊ณผ ๊ฒฐํฉํ๊ณ Feliz๋ก SSR์ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ์ /๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ต๋๋ค.
Html
๊ฐ Feliz์์ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ด ์ธํ
๋ฆฌ์ผ์ค๊ฐ ํํคํด ๋ณด์ธ๋ค๋ ์ฌ์ค์ด ๋งค์ฐ ๊ธฐ์์ง ์์ต๋๋ค.
let Html = HtmlEngine(renderer)
๊ทธ๊ฒ์ ๋ ์ฌ์ํ ๋ฌธ์ ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ํ์ฌ์ ๊ฐ๊ฑฐ๋ ๋ ์ข๊ธฐ๋ฅผ ๋ถ๋ช
ํ ์ํ ๊ฒ์
๋๋ค. ์๋ง๋ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ ๋ํ๋ Feliz.HtmlEngine
์ ํ๋ฌ๊ทธ์ธ์ผ๊น์? ์ด ์๋ฃจ์
์ ์น ์๋ฒ๊ฐ Fable์ ์์กดํ๋๋ก ๋ง๋ค ๊ฒ์
๋๋ค.
ํ์ฌ ์ํ๋๊ณ ์๋ SSR์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ค ํ๋๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋จ์ํ ์๋ํ์ง ์๊ณ ์๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์ Feliz.Bulma
/ Feliz.Bulma.ViewEngine
)๋ ์กฐ์ ์ด ํ์ํ์ง ์๋ ํ ์ฌ์ ํ ์กฐ์ ์ด ํ์ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๋ฌด์์ธ์ง ์ ์ฌํ ์ฐธ์กฐ๋ฅผ ์ํด ๋ ๋ค์ ๋ํ ์ถ์ API๋ฅผ ๋น๋ํ์ญ์์ค.
์ฌ๊ธฐ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์๋ํ ์ฒซ ๋ฒ์งธ ํ์ธํธ๋ฅผ ์์ ํ ์๋ฎฌ๋ ์ดํธํ๊ณ ์ถ์ ๋ SSR์ ์ง์ ์ํํ๋ ๊ฒ์ด ๋งค์ฐ ์คํ ๊ฐ๋ฅํ์ง ์๋ค๋ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์ ๋ง๋ก ํ์ํ ๊ฒ์ .NET์ ์ํ ReactDOMServer
์ ๊ฐ์ ๊ฒ์
๋๋ค. ๋๋ ์ด๊ฒ์ ๋ํด ๋๋ฌด ๊น์ด ํ๊ณ ๋ค์ง ๋
@Shmew ์ ์๊ฒฌ์ ๊ฐ์ฌํ๊ณ ๋ฆ๊ฒ ๋ต์ฅ์
open type
์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.์ฌ์ค, ์ด๊ฒ์ ์ํด ๋๋ SSR ๋ฟ๋ง ์๋๋ผ _beyond React_ :wink:์์๋ ์๊ฐํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด F# ์๋ฒ์ html ์์ฑ๊ธฐ๋ React์ ๋ฐ๋์ ํธํ๋ ํ์๋ ์๊ณ ๋ค๋ฅธ ๋ ๋๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์ ๋๋ค. ํ๋ก ํธ์๋์ ๋ํด ๋ฐ์ํฉ๋๋ค.
@Shmew ๋๊ธ ๊ฐ์ฌํ๊ณ ๋ฆ๊ฒ ๋ต์ฅํด์ ์ฃ์กํฉ๋๋ค
์ฒ๋ง์์. ๊ฑฑ์ ๋ง์ธ์!
Intellisense: ํ , ์ถ์ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์์ ๋ง ์์ฑํ์ง๋ง ์๋ ์์ฑ์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋ค์ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๋ ์ ์ ์ ํ์ ์ก์ธ์คํ๋ ๋์ ๊ฐ์ ์ก์ธ์คํฉ๋๋ค. ๋๋ ๊ด์ฐฎ์ ๊ฒ์ด๊ณ ๋ง์ ๊ฒฝ์ฐ์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฃผ์ ๋จ์ ์ ์๋ง๋ ๊ฐ๋ฐฉํ ์ ํ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฃ์กํฉ๋๋ค, ๋๋ ๋งค์ฐ ๋ช
ํํ์ง ์์์ต๋๋ค. Intellisense๋ ๊ด์ฐฎ์ง๋ง Html
๊ฐ ๋ค๋ฅธ ์์์ด๋ผ๋ ์ฌ์ค์
๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ์ ๋ง ๋ง์ด๋ ๐
. ์ฐ๋ฆฌ๊ฐ open type
ํ ์ ์๋ค๋ ์ฌ์ค์ ์ฌ์ค ์กฐ๊ธ ๋ ํฐ ๋ฌธ์ ์
๋๋ค. ๋๋ ์ผ๋ถ ์ฌ๋๋ค ์ด ๋ชจ๋ ๊ฒ์ ๋ค์์คํ์ด์ค๋ก ์ง์ ํ๋ ๊ฒ๋ณด๋ค ๊ทธ๊ฒ์
๋ฒ๋ค ํฌ๊ธฐ: ์ด๊ฒ๋ ํ์ธํด์ผ ํฉ๋๋ค. ๋ด ํฌ๋ง์ ํด๋์ค ๋ฉค๋ฒ๊ฐ ํธ๋ฆฌ๋ฅผ ํ๋ค ์ ์๊ณ ์ ์ถ์ํ ์ ์๋ ๋ถ๋ฆฌ๋ ํจ์๋ก Fable์ ์ํด ์ปดํ์ผ๋๊ธฐ ๋๋ฌธ์ ๋ง์ด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ์ ๋๋ค. ๋ถํํ๋ ์์ฑ๋ ์ฝ๋๋ #284 ์ดํ์ ๊ฐ์ด ๋ฉ์ง๊ฒ ๋ณด์ด์ง ์์ต๋๋ค.
interop ํจ์๊ฐ ์ด๋ฏธ ์ธ๋ผ์ธ๋์ง ์์์์ ๊นจ๋ซ์ง๋ ๋ชปํ๊ณ ์ด๋ฏธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ๋ผ์ธํ์ต๋๋ค. ์ ์ฒด Html
๋ชจ๋์ ๋ชจ๋ ์ธ๋ผ์ธ ๋ํผ์ด๊ธฐ ๋๋ฌธ์ JS์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋๋ ๊ฒฝ์ฐ์ ๋น๊ตํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ ์ฆ๊ฐ๊ฐ ์๋ค๋ ์ฌ์ค์ ๋ํด ๋ ๋ง์ด ์ด์ผ๊ธฐํ์ต๋๋ค. ๋ ์ด์ ๊ทธ๋ ์ง ์์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ก.
๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ์, ์ถ์ API์ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค. ์ต์ํ์ ๋ณ๊ฒฝ์ผ๋ก ๋ฐ๋๋๋ค.
์ด๊ฒ์ ๋ฌธ์ ๋ ๋ชจ๋ ๋ด๋ถ๊ฐ JS ์ ์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ดํฐ๋ธ ๋ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๋๋ก ์๋ ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
๋์: TBH, Fable.React์ (๊ธฐ์ฌ๋) ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ทธ๋ค์ง ๋ณต์กํด ๋ณด์ด์ง๋ ์์ง๋ง(๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ html ํ๊ทธ์ ์ผ๋ถ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ) SSR์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. React.NET๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฌ์ด์ง ์ฌ๋ถ. Feliz์๋ .NET์์ ๋ฐ์ํ๋ Fable ํธ๋ฆญ(์ฃผ๋ก ์์ ํ์ง ์์ ์บ์คํธ)์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ Feliz์์๋ ootb๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค, ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ์๋ํ์ง๋ง Feliz.MaterialUI
์ผ๋ถ ๊ตฌ์ฑ ์์์ ๊ฐ์ด ๋ ๋ณต์กํ ๊ฒ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ดํดํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด React SSR์ node.js์์ ์๋ฃ๋ ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์๋ํ๋ฉด ReactDOMServer
๋ฅผ ์คํํ์ฌ ์ค์ ๋ก ํ์ด์ง์ ์ฒซ ๋ฒ์งธ ํ์ธํธ์ธ ์ ์ฒด ๋ฌธ์์ด์ ๋ฑ์ด๋ผ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ด ์ดํด๋ React.NET
๊ฐ ์ ํํ ๊ทธ๊ฒ์ ์ํํ๊ธฐ ์ํด node.js ํ๋ก์ธ์ค๋ฅผ ๋ํํ๋ ๊ฒ์
๋๋ค.
Feliz ์ฝ๋๋ ์ด๋ฏธ ์ด์ ๊ฐ์ ๊ฒ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ค์ ๋ก ๋งค์ฐ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Fable compiles F# React
-> node.js process imports and returns html string
-> web server caches output
-> web server serves page
๋ฐ์์ ๋์ด์
์ด๊ฒ์ ํ๋ฅญํ ์์ ์ด๋ฉฐ, React ๋๋ ๊ธฐํ ์์ ์์ด ์์ํ HTML์ ๋ ๋๋งํ๋ ค๋ ๊ฒฝ์ฐ ํ์คํ ์ํ ๊ฒ์ ๋๋ค.
์ ๋ ์ด ์์ด๋์ด๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ ์งํ ์ํฉ์ ๋ณผ ์ ์์ต๋๋ค: https://github.com/alfonsogarciacaro/Feliz.Engine
์์ง ํด์ผ ํ ์ผ์ด ์๊ณ ๋ช ๊ฐ์ง ์๊ตฌ์ฌ์ด ์์ง๋ง ์ด๋ฏธ ์๋ํ๊ณ ์์ผ๋ฉฐ Feliz API์ ๋๋ถ๋ถ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ๋ค๋ง ์ฝ๊ฐ์ ์์ ์ ๊ฐํด์ผ ํด์ ํ ๋ฆฌ์ฆ๋ฅผ ์ด๋ฐ๊ฑธ๋ก ๋์ฒดํ๊ธฐ ํ๋ ๊ฒ ์ฌ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ Feliz์ ์ถ์ ๋ฒ์ ์ ๋ง์ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์:
์ด๊ฒ๋ค์ ๋ชจ๋ ์ด์์ด์ง๋ง ์๋ ์ค์ด๋ฉฐ ๋งค์ฐ ์ ์ ์ฝ๋๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ ์ค์ํ ๊ฒ์ ์ด๋ค ๋ชจ๋๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ํ๋๊ณ ์น์ํ API๋ฅผ ์ ๊ณตํ๋ฉฐ ํ์ฅ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฌํ ๋ชจ๋ (๋ฐ ํฅํ) ์ฑ๊ณผ ํธํ๋๋ BulmaEngine์ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. 2. ๋ฐ 3์ ๊ฒฝ์ฐ ์ฆ๋ถ ์ปดํ์ผ์ด .NET๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ Fable์ ์ฌ์ฉํ๊ณ ์์ง๋ง Feliz.Engine์ .NET๊ณผ ํธํ๋๋ฏ๋ก(๋ชจ๋ unbox
) ๊ฐ๋จํด์ผ ํฉ๋๋ค. F# .NET ์๋ฒ์ ํธํ๋๋๋ก ํ๊ณ HTML ์์ฑ๊ธฐ๋ฅผ React์ ํธํ๋๋๋ก ๋ง๋๋ ๋ฐ ๋ง์ ์์
์ด ํ์ํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@Zaid-Ajaj๋ ์ด๋ป๊ฒ ์๊ฐํ์ธ์? ๋๋ ์ด๋ฏธ ํ์ฌ Feliz React API๋ฅผ ๋์ฒดํ๋ ์์ด๋์ด๋ฅผ ํฌ๊ธฐํ์ต๋๋ค ๐ ํ์ง๋ง ์ด๋ฐ ๊ฒ์ด "Feliz family"(์๋ง๋ ์ด repo์ ์์)์ ์ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ญ๋๊น? ์ด๋ฆ์ด ๊ด์ฐฎ์ต๋๊น, ์๋๋ฉด ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
์๋ ํ์ธ์ @alfonsogarciacaro , ์ด๋ฒ ์ฃผ์ ์ด ์ํ์ ์์ธํ ์ดํด๋ณด๊ณ ํ์คํ ๋์์ฌ ๊ฒ์ ๋๋ค ๐
์๋ ํ์ญ๋๊น,
์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ดํด๋ณด์๋๋ฐ ์ด ์ถ์ ๋ฒ์ ์ด ๋ฒ๋ค ํฌ๊ธฐ์ ์ฝ๊ฐ์ ์ํฅ์ ๋ฏธ์น ๊ฒ ๊ฐ์ต๋๋ค. ์ง๊ธ์ ํ ๋ฆฌ์ฆ์ ํน์ง ์ค ํ๋๋ผ๋ ์ ์ ์ง์ ํ๊ณ ์ถ์๋ค.
์, ์ํฅ์ด ์์๋ฉ๋๋ค. ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ ์ผ๋ง๋ ๋๋์ง์
๋๋ค. :) ์ค๊ฐ ๊ท๋ชจ ์ฑ์ ๊ฒฝ์ฐ ๋์ ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์ง๋ง ๋ฌผ๋ก ๋ ์คํ์ผ ๋ชจ๋์์ fulma-demo ๊ฐ์ ๊ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ด๋ฏ๋ก ์ฐ๋ฆฌ๋ ๋น๊ตํ๊ณ ์ต์ ํ ๊ธฐํ๋ฅผ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. Feliz ๋์ฐ๋ฏธ๊ฐ ๋ฒ๋ค ํฌ๊ธฐ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ๋ ๊ฒ๋ ํฅ๋ฏธ๋ก์ธ ๊ฒ์
๋๋ค. ํ์ฌ Feliz๊ฐ ์์ฑํ ์ฝ๋๋ ๋งค์ฐ ํ๋ฅญํ๊ณ ์ปดํ์ผ๋ JSX์ ๋งค์ฐ ์ ์ฌํ์ง๋ง ํจ์๋ฅผ ์ถ์ํ ์ ์์ผ๋ฏ๋ก .createElement("div")
์ ๊ฐ์ ๋ง์ ํธ์ถ์ ์ค๋ณต์ ์ค์ด๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค(gzip์ด ์์ถํ ์ ์๋์ง ํ์คํ์ง ์์ ๊ทธ๋ฌ๋ ์ด๋ฌํ ํธ์ถ).
๋ค, ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ด ๋ฉ์ง API/์คํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋ํ๋ ์ฌ๋์ด ์์ ๊ฑฐ๋ผ๊ณ ๋ ์์๋ ํ ์ ์์ต๋๋ค. ๋ด ์ ์ผํ ์ง์ง ๊ด์ฌ์ฌ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ง๊ณผ ์์์ ์ค๋ช ํ ์ผ๋ถ ์ธ์ฒด ๊ณตํ์ ๋ฌธ์ ์ ์ํฅ์ ์ค ์ ์๋์ง ์ฌ๋ถ์์ต๋๋ค.
์๋ ํ์ธ์ @alfonsogarciacaro , ์์ ์ฝ๋๋ฅผ ์ ๋ณด์์ต๋๋ค. css ์์ง๊ณผ ์ ์ html ์์ง์ด ๋ชจ๋ node.js ์คํธ๋ฆผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ nodejs ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์ฌ์ค์ ๋๋์ต๋๋ค. ์์ด๋์ด๊ฐ ํฅ๋ฏธ๋กญ๊ธด ํ์ง๋ง ์์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๋ ์ ์์ ์ ๋ณด๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
ReactDOM
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ html์ ์์ฑํฉ๋๋ค. Feliz.ViewEngine์ dotnet์์ ์ ์ HTML์ ์์ฑํ๋ ๊ฒ๊ณผ ๋์ผํ ์์
์ ์ํํฉ๋๋ค. API๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์์ด๋์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง @Shmew๊ฐ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ๋ค๋ฅธ ๋ฌธ์ ๋ก ์ธํด ์ด๋ ค์์ก์ต๋๋ค. ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ฑ๋ ์ฝ๋์ ์ํฅ์ ๋์ฒด๋ก ํฅ๋ฏธ๋ก์ด ์ด๋์ ๋๋ค. ์์งํ ๋งํด์ ์ ๋ ์๋ก์ด API์ ์ด๋ ฌํ ํฌ์ด ์๋๋ฉฐ ๊ฐ์ธ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์คํํ๋ ๋์ React์์ ๋ ๋ง์ ๋ฌธ์, ์์ ๋ฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ์ฌ ํ์ฌ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ๊ณ ์ถ์ต๋๋ค. ์ ๊ฐ ๊ทธ๊ฒ์ ๋ํด ์ฝ๊ฐ ๋ถ์ ์ ์ผ๋ก ์๊ฐํ๋ค๋ฉด ์ฃ์กํฉ๋๋ค. ์๋ง ๋ง์ ์ผ์ ํ์ จ์ ๊ฒ์ ๋๋ค. Feliz์ ๊ฐ์ ์ด๋ฆ์ ๋์๊ด์์ ์๊ฐ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ์๊ด ์์ต๋๋ค.
@Zaid-Ajaj ์ํ์ ํ์ธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๋น์ ์ ์ ์ง์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. css ๋ฐ html ํ๋ฆฐํฐ๋ Feliz.Engine์ ์ ์ฌ์ ์ฉ๋์ ์ ์ฉํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด์ง/์ด๋ ค์ด์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ๊ฐ๋จํ ์์ผ ๋ฟ์ ๋๋ค(์ธ์๋ฅผ ์ํํ๋ ์ฝ๋๋ 50์ค์ ๋ถ๊ณผํฉ๋๋ค). ์ฆ๋ถ ์ปดํ์ผ์ด ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ Fable & node๋ฅผ ์ฌ์ฉํ์ง๋ง "์์น์ ์ผ๋ก" .net์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. Snabbdom ์ด๋ํฐ๋ ๋ ๋ค๋ฅธ ๋น ๋ฅธ ์์ด๊ธฐ๋ ํ์ง๋ง ์ค์ ๋ก๋ ๋ง์์ ๋ค๊ธฐ ์์ํ์ต๋๋ค. ํ์ง๋ง ๊ทธ๊ฑด ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค. :)
์ด์จ๋ , ๋๋ ๋ง์นจ๋ด ๋ณ๊ฒฝ ์ฌํญ์ ๊นจ๋จ๋ฆฌ์ง ์๊ณ ํ์ฌ Feliz React ์ฑ์ ์ถ์ํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. Feliz ๊ฐ์ API ๐
@alfonsogarciacaro ๋๋จํด ๋ณด์ด๋ค์. #262์์ ์ธ๊ธํ๋ฏ์ด Fable.React์์ Feliz๋ก ์ ํํ ํ ๋ด๊ฐ ์ ๋ง ์ ๋ง ๊ทธ๋ฆฌ์ํ๋ ์ ์ผํ ๊ฒ์ '๊ทธ๋ฅ ์๋ํ๋' SSR์ ๋๋ค. Feliz์ Feliz.ViewEngine์ ๋ชจ๋ ๋๋ผ์ด ํ๋ก์ ํธ์ด์ง๋ง ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์์ผ๋ฉด ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ด๋ ค์์ง๋๋ค. ifdefs๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ifdefs๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฝ๋์์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ผํ ๋ฐ ์์ชฝ ์ธ๊ณ ์ฝ๋. ๊ทธ ๊ฒฉ์ฐจ๋ฅผ ์ค์ด๋ ๊ฒ์ ๋ฌด์์ด๋ Feliz ๋ฐ .Net ์๋ฒ๋ก ์์ ํ ๋ ์ถ์ ์ง์ ํฅ์์ํฌ ๊ฒ์ ๋๋ค.
์. ํ๋ฅญํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ Feliz.Engine์ด Feliz์ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊น๋ค๋กญ์ต๋๋ค. ์ฆ, Feliz ์์ฒด์ ๊ฒฝ์ํ Feliz.Engine React ๊ตฌํ์ ์์ฑํด์ผ ํ๋ฏ๋ก ํผํ๊ณ ์ถ์ต๋๋ค ;) ํ์ง๋ง ๋ฐ๋ผ๊ฑด๋ ์ฐ๋ฆฌ๋ ์ฐพ์ ์ ์์ต๋๋ค. ํด๊ฒฐ์ฑ .
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@alfonsogarciacaro ๋๋จํด ๋ณด์ด๋ค์. #262์์ ์ธ๊ธํ๋ฏ์ด Fable.React์์ Feliz๋ก ์ ํํ ํ ๋ด๊ฐ ์ ๋ง ์ ๋ง ๊ทธ๋ฆฌ์ํ๋ ์ ์ผํ ๊ฒ์ '๊ทธ๋ฅ ์๋ํ๋' SSR์ ๋๋ค. Feliz์ Feliz.ViewEngine์ ๋ชจ๋ ๋๋ผ์ด ํ๋ก์ ํธ์ด์ง๋ง ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์์ผ๋ฉด ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ด๋ ค์์ง๋๋ค. ifdefs๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ifdefs๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฝ๋์์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ผํ ๋ฐ ์์ชฝ ์ธ๊ณ ์ฝ๋. ๊ทธ ๊ฒฉ์ฐจ๋ฅผ ์ค์ด๋ ๊ฒ์ ๋ฌด์์ด๋ Feliz ๋ฐ .Net ์๋ฒ๋ก ์์ ํ ๋ ์ถ์ ์ง์ ํฅ์์ํฌ ๊ฒ์ ๋๋ค.