์ด๊ฒ์ ํ์์ ์ธ IMHO์ฒ๋ผ ๋ณด์ ๋๋ค.
Material-UI ์ ๊ฐ์ ํ์ฌ ํญ๋ชฉ์ ํ์ฅํ๋ ๊ฒ์ด ๊ฐ๋จํฉ๋๊น?
๊ทธ๋ ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ์ข ์ ๊ฐ์ด๋๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. :)
์ด๊ฒ์ ํ์์ ์ธ IMHO์ฒ๋ผ ๋ณด์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค! ๋ง์์ ๋์ ๋ค๋ ๋คํ์ ๋๋ค :์ค๋ง์ผ:
Material-UI์ ๊ฐ์ ํ์ฌ ํญ๋ชฉ์ ๋ํด ํ์ฅ์ด ๊ฐ๋จํฉ๋๊น?
๋น์ฐํ์ง๋ง, ์ฐ๋ฆฌ๋ ์ฐจ๋ณ์ ์ธ ๊ณต์ฉ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ ๋ฐฉ์์ด ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ๋๋ ์๊ฐ์ด ํ๋ฝํ ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ง ์ต์ ์ด ์๋ค๋ ์์ด๋์ด์ ๋๋ค.
prop
์ ์ ์ ํ ํ์ฅMui
์ผ ์ ์์)์ ๊ณ ์ ํ ์ ์ฌํ prop
์ ์ ์ ํ์ ๋ง๋ญ๋๋ค. Mui
$๋ก prop
๋ณ์นญ์ ์ง์ ํ๊ณ Mui ๊ด๋ จ(์ค๋ฒ๋ก๋๋) ์์ฑ ๋ฐ ๊ธฐ๋ฅ์ผ๋ก Mui
๋ฅผ ํ์ฅํ ์๋ ์์ต๋๋ค.ํ์ฅ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํฉ๋๋ค.
type prop with
static member hello (value: string) = Interop.mkAttr "hello" value
์ด๊ฒ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ "์ต์ข ํํ"์ธ์ง ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋จผ์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ์ฌ ๊ทธ๊ฒ์ ์๋ํ๊ณ ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ณด๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ณ ๋ ค ์ค์ ๋๋ค.
๊ฐ์ฌ ํด์! ์๋ ๋ฐฉ์์ ํ์ธํ๊ธฐ ์ํด API์ ์ผ๋ถ์ ๋ํด์๋ง MUI์ ๋ํ ํ ์คํธ๋ฅผ ์ด๋ฏธ ์งํ ์ค์ ๋๋ค. ์๋ง ์ฃผ์ค/๋ง์ ๊ณต์ ํ ์์ ์ ๋๋ค. ์ ๊ฐ ์ ๋๋ก ์งํํ๊ณ ์๊ณ Feliz ์ ์ ์ ๋ฐ๋ฅด๊ณ ์๋์ง ๋ณด๊ธฐ ์ํด ํ ๋ฒ๋ง ๋ด์ฃผ์๋ฉด ์ ๋ง ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ๊น์ง๋ ์ฑ๊ณตํ ๊ฒ ๊ฐ์ต๋๋ค!
๊ทธ๋ฌ๋ ๊ธฐ์กด prop
์ ํ์ ํ์ฅํ์ง ์์์ต๋๋ค. ๋ค๋ฅธ ๋ค์์คํ์ด์ค( Feliz.MaterialUI
)์ ๋ณ๋์ prop
์ ํ์ ์ ์ํ์ต๋๋ค. ๊ฒ๋ณด๊ธฐ์ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ๋ฌผ๋ก Feliz
๋ฐ Feliz.MaterialUI
๋ฅผ ๋ชจ๋ ์ด๋ฉด ์ผ์นํ๋ ๋ชจ๋ ์ ํ์ ๋ชจ๋ ๊ตฌ์ฑ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
Html
์ ํด๋นํ๊ณ ์ค์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ Mui
์ ํ์ด ์์ต๋๋ค.
(ํ์ฌ #13์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ prop
์ ๋ณ๋ ํ์ ๋ชจ๋์ ๊ตฌ์ฑ ์์๋ณ ์ํ์ ๋ฐฐ์นํ์ต๋๋ค.)
Feliz์์ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ string
๊ฐ ์๋๋ผ ReactElementType
$๋ฅผ ํ์ฉํ๋ reactElement
๋ฐ createElement
๋ฅผ ๊ฐ๋ ๊ฒ์
๋๋ค(์ ์๊ฐ์๋). createElement (importDefault "@material-ui/core/Button")
๋ฅผ ํธ์ถํ ์ ์๋๋ก ํ์ฌ ์ด ๋ ๋์ฐ๋ฏธ๋ฅผ ์ง์ ๋ง๋ค์์ต๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋ชจ๋ ๋ฉค๋ฒ๊ฐ inline
์ด์ด์ผ ํฉ๋๊น? ์ฅ๋จ์ ์ ๋ฌด์์
๋๊น? ์์์ inline
๋ฅผ ์ฌ์ฉํ์ง ์์์ง๋ง Feliz์ ๋ชจ๋ ๊ฒ์ inline
์
๋๋ค.
๊ฐ์ฌ ํด์! ์๋ ๋ฐฉ์์ ํ์ธํ๊ธฐ ์ํด API์ ์ผ๋ถ์ ๋ํด์๋ง MUI์ ๋ํ ํ ์คํธ๋ฅผ ์ด๋ฏธ ์งํ ์ค์ ๋๋ค. ์๋ง ์ฃผ์ค/๋ง์ ๊ณต์ ํ ์์ ์ ๋๋ค. ์ ๊ฐ ์ ๋๋ก ์งํํ๊ณ ์๊ณ Feliz ์ ์ ์ ๋ฐ๋ฅด๊ณ ์๋์ง ๋ณด๊ธฐ ์ํด ํ ๋ฒ๋ง ๋ด์ฃผ์๋ฉด ์ ๋ง ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ๊น์ง๋ ์ฑ๊ณตํ ๊ฒ ๊ฐ์ต๋๋ค!
๊ต์ฅํด! ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์๋ณด๊ณ ํ์คํ ๊ธฐ์ ๊ฒ์ ๋๋ค
๊ทธ๋ฌ๋ ๊ธฐ์กด prop ์ ํ์ ํ์ฅํ์ง ์์์ต๋๋ค. ๋ค๋ฅธ ๋ค์์คํ์ด์ค(Feliz.MaterialUI)์ ๋ณ๋์ ์ํ ์ ํ์ ์ ์ํ์ต๋๋ค. ๊ฒ๋ณด๊ธฐ์ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ๋ฌผ๋ก Feliz์ Feliz.MaterialUI๋ฅผ ๋ชจ๋ ์ด๋ฉด ์ผ์นํ๋ ๋ชจ๋ ์ ํ์ ๋ชจ๋ ๊ตฌ์ฑ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
Html์ ํด๋นํ๊ณ ์ค์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ Mui ์ ํ์ด ์์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ Mui๋ฅผ ์ํด ํ ์ผ์ ๋๋ค.
(ํ์ฌ #13์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ prop์ ๋ณ๋ ํ์ ๋ชจ๋์ ๊ตฌ์ฑ ์์๋ณ props๋ฅผ ๋ฐฐ์นํ์ต๋๋ค.)
์ ํํ ์ ์๋ ์ต์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ Mui์ ์ ํฉํฉ๋๋ค.
Feliz์์ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ ๋ฌธ์์ด์ด ์๋ ReactElementType(๋ด ์๊ฐ์๋)์ ํ์ฉํ๋ reactElement ๋ฐ createElement๋ฅผ ๊ฐ๋ ๊ฒ์ ๋๋ค. createElement(importDefault "@material-ui/core/Button")๋ฅผ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค. ํ์ฌ ์ด ๋ ๋์ฐ๋ฏธ๋ฅผ ์ง์ ๋ง๋ค์์ต๋๋ค.
Interop
๋ชจ๋์์ ์ฌ์ฉ ์ค์ธ ๋ฉค๋ฒ๋ฅผ ๊ฒํ ์ค์
๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ์ ๊ณต๊ฐํ์ต๋๋ค. ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด ์ฌ๊ฒํ ๋ ๊ฒ์
๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋ชจ๋ ๊ตฌ์ฑ์์ด ์ธ๋ผ์ธ์ด์ด์ผํฉ๋๊น? ์ฅ๋จ์ ์ ๋ฌด์์ ๋๊น? ์์์ ์ธ๋ผ์ธ์ ์ฌ์ฉํ์ง ์์๋ค๋ ๊ฒ์ ์์ง๋ง Feliz์ ๋ชจ๋ ๊ฒ์ด ์ธ๋ผ์ธ์ ๋๋ค.
์์ ํ์ฅ ๋ฉค๋ฒ๋ฅผ ์ธ๋ผ์ธํ์ด์ผ ํ์ต๋๋ค!
๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ์์ฑ ๊ฐ์ด string/int/bool/enum๊ณผ ๊ฐ์ ์์์ ์ด๋ฉด ์์ฑ์ ์ธ๋ผ์ธํ์ง๋ง ์์ฑ์ด ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒฝ์ฐ ์ธ๋ผ์ธํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ธ๋ผ์ธ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ์ฒด ํจ์ ๋ณธ๋ฌธ์ด ํธ์ถ ์์น์ ์ธ๋ผ์ธ๋๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ๋์ผํ ํจ์๋ฅผ 10๋ฒ ์ฌ์ฉํ๋ฉด ํจ์ ๋ณธ๋ฌธ์ ํ ๋ฒ ์ ์๋๊ณ 10๋ฒ ์ฐธ์กฐ๋๋ ๋์ 10๋ฒ ์ธ๋ผ์ธ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค.
๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ์์ฑ ๊ฐ์ด string/int/bool/enum๊ณผ ๊ฐ์ ์์์ ์ด๋ฉด ์์ฑ์ ์ธ๋ผ์ธํ์ง๋ง ์์ฑ์ด ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒฝ์ฐ ์ธ๋ผ์ธํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ธ๋ผ์ธ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ์ฒด ํจ์ ๋ณธ๋ฌธ์ด ํธ์ถ ์์น์ ์ธ๋ผ์ธ๋๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ๋์ผํ ํจ์๋ฅผ 10๋ฒ ์ฌ์ฉํ๋ฉด ํจ์ ๋ณธ๋ฌธ์ ํ ๋ฒ ์ ์๋๊ณ 10๋ฒ ์ฐธ์กฐ๋๋ ๋์ 10๋ฒ ์ธ๋ผ์ธ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค.
๋ฐ๊ฐ์์! ๊ทธ๋ฌ๋ (Fable์ ๋งฅ๋ฝ์์) ์ ์ฒ์์๋ ์ธ๋ผ์ธ์ ๋๊น? "๋จ์ํ" ํจ์/๋ฉ์๋ ๋ณธ๋ฌธ์ ์ด์ ์ ๋ฌด์์ ๋๊น?
[<Inject>] ITypeResolver<'t>
๋ฅผ ์ ์ ํด๋์ค์ ์ ํ์ ์ธ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค(๊ณ ๋๋ก ์ ๋ฌธํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. Fable.SimpleJson/Thoth.Json ์ฐธ์กฐ).ํ๋ก๋์ ๋ฒ๋ค์ ๋ง๋ค ๋ babel์ด tree-shaking์ ํ๊ณ ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ธ๋ผ์ด๋์ ๊ทธ๊ฒ์ ๋ฌผ๋ฆฌ์น ๊ฒ์ ๋๋ค.
@Luiz-Monad ๊ทธ๋ ๋ค๋ฉด ์ด์์ ์ผ๋ก Feliz์ ์ด๋ค ๊ฒ๋ ์ธ๋ผ์ธ๋์ด์๋ ์๋๋ค๋ ๋ง์์ด์ ๊ฐ์? ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ํ ์ธ๋ผ์ธ์ ๋น์์ฐ์ ์ ๋๊น?
@Luiz-Monad ๋น์ ์ด ๋งํ๋ ๊ฒ์ ๊ต์ฅํ ๊ฒ์ ๋๋ค! ์ ์ด๋ ์ปดํ์ผ์ด ๊ทธ๋ฐ ์์ผ๋ก ์๋ํ๋ค๋ฉด. ๋ค์์ REPL๋ก ์๋ํ ์ ์๋ ์์ ๋๋ค.
module App
type prop =
// does useless stuff
static member f() =
[ 1 .. 100 ]
|> List.map (fun x -> x * 20)
|> List.collect (fun n -> [n; n])
|> List.fold (+) 0
// does useless stuff
static member inline k() =
[ 1 .. 100 ]
|> List.map (fun x -> x * 20)
|> List.collect (fun n -> [n; n])
|> List.fold (+) 0
static member g() = 1
let value = prop.g()
printfn "%d" value
์ฌ๊ธฐ์ prop
์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
f()
์๋ ํจ์ ๋ณธ๋ฌธ์ด ํฌํจ๋์ด ์์ต๋๋ค. -> ์ธ๋ผ์ธ๋์ง ์๊ณ ์ฌ์ฉ๋์ง๋ ์์ต๋๋ค.k()
์ ํจ์ ๋ณธ๋ฌธ์ด ํฌํจ๋จ -> ์ธ๋ผ์ธ๋์์ง๋ง ์ฌ์ฉ๋์ง ์์g()
์๋ ํจ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. -> ์ธ๋ผ์ธ๋์ง ์๊ณ ์ฌ์ฉ๋จf()
๋ฐ g()
๋ ๋ค ์ปดํ์ผ๋์ง ์๋๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. f()
(์ธ๋ผ์ธ๋์ง ์๊ณ ์ฌ์ฉ๋์ง ์์)๋ ์ด์จ๋ ์ปดํ์ผ๋์ง๋ง k()
(์ธ๋ผ์ธ๋จ, ์ฌ์ฉ๋์ง ์์)๋ ์ปดํ์ผ๋ ๋ฒ๋ค๋ก ๋ง๋ค์ง ์์ต๋๋ค.
import { fold, collect, map, ofSeq, ofArray } from "fable-library/List.js";
import { type } from "fable-library/Reflection.js";
import { rangeNumber } from "fable-library/Seq.js";
import { toConsole, printf } from "fable-library/String.js";
import { declare } from "fable-library/Types.js";
export const prop = declare(function App_prop() {});
export function prop$reflection() {
return type("App.prop");
}
export function prop$$$f() {
return fold(function folder(x$$1, y) {
return x$$1 + y;
}, 0, collect(function mapping$$1(n) {
return ofArray([n, n]);
}, map(function mapping(x) {
return x * 20;
}, ofSeq(rangeNumber(1, 1, 100)))));
}
export function prop$$$g() {
return 1;
}
export const value = prop$$$g();
toConsole(printf("%d"))(value);
์ค์ ๋ก ์๋ํ์ง๋ง ์ด๋ฅผ ์ํํ๋ ค๋ฉด webpack
๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ํธ๋ฆฌ๋ฅผ ํ๋๋ ๊ฒ์ ์ฐํ ์์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ REPL์์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ ์
/// Library.fs
module Library
type prop =
// does useless stuff
static member f() =
[ 1 .. 100 ]
|> List.map (fun x -> x * 20)
|> List.collect (fun n -> [n; n])
|> List.fold (+) 0
// does useless stuff
static member inline k() =
[ 1 .. 100 ]
|> List.map (fun x -> x * 20)
|> List.collect (fun n -> [n; n])
|> List.fold (+) 0
type AppMain =
static member g() = 1
//// App.fs
module App
let value = Library.AppMain.g ()
printfn "%d" value
ํ์
declare(function Library_prop() {
// see its empty, this weren't removed too because of `keep_classnames: true, keep_fnames: true ` in the terser plugin
});
declare(function Library_AppMain() {
});
!function toConsole(arg) {
return arg.cont(function (x) {
console.log(x)
})
}(printf('%d')) (1),
__webpack_require__.d(__webpack_exports__, 'value', function () {
return 1
})
๋ํ ํ ์คํธ์ ์ฃผ์ํด์ผ ํ ์ฌํญ์ด ์์ต๋๋ค. ํญ๋ชฉ ํ์ผ์ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋์ง ์๋๋ค๋ ์ ์์ ์ผ์ข ์ ํน๋ณํฉ๋๋ค. ( ์ ์ ํด๋์ค์ ์ด๊ธฐํ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋์ ๋ถ์์ฉ์ ์ผ์ผํค๊ธฐ ์ํด ์ ์ ์ด๋์ ๋ผ์ด์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.)
์ด ํ ์คํธ๋ฅผ ์ํด ๋ง๋ ์ด ์ ์ฅ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค. https://github.com/Luiz-Monad/test-tree-shaking
์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ธ๋ผ์ธ์ด Feliz์ ์ปจํ ์คํธ์์ ์ค์ ๋ก ์ ์ฉํ ์์ ์ ์ํํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ฅผ ์ถ๊ฐ๋ก ์กฐ์ฌํ ๊ฒ์ ๋๋ค.
์ธ๋ผ์ธ์ด Feliz์ ์ปจํ ์คํธ์์ ์ค์ ๋ก ์ ์ฉํ ์์ ์ ์ํํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ฅผ ์ถ๊ฐ๋ก ์กฐ์ฌํ ๊ฒ์ ๋๋ค.
๋ฉ์ง, ๋น์ ์ด ๋ฌด์์ ์ฐพ์ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค :)
๊ต์ฅํด! ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์๋ณด๊ณ ํ์คํ ๊ธฐ์ ๊ฒ์ ๋๋ค
cmeeren/fable-elmish-electron-material-ui-demo ์์ feliz
๋ถ๊ธฐ๋ฅผ ํ์ธํ์ญ์์ค.
๋๋ถ๋ถ์ ์ฝ๋๋ (HTML) API ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์์ฑ๋ฉ๋๋ค. ์์ฑ๊ธฐ ํ๋ก์ ํธ(์ถ์
ํ๊ณ ํด์ปค์ง๋ง ์์
์ ์๋ฃ๋จ)์ ์ค์ ๋ฐ์ธ๋ฉ์ ์ํ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ๋ ๋๋ฌ ํ๋ก์ ํธ์์ App.fs
์๋ก์ด Feliz ์คํ์ผ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋๋ก ๋ณํ๋์์ต๋๋ค.
๊ธฐ๋ถ์ด ์ข์ ๋ ๋ณด์๊ณ ๊ถ๊ธํ ์ ์ด๋ ์๊ฐ์ด ์์ผ์๋ฉด ์๋ ค์ฃผ์ธ์.
@cmeeren ํ์ฌ API IMHO๋ณด๋ค ๋งค์ฐ ํ๋ฅญํ๊ณ ํจ์ฌ ์ข์ ๋ณด์ด์ง๋ง ์ฌ์ ํ ์ฝ๊ธฐ๊ฐ ์กฐ๊ธ ์ด๋ ต์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ํน์ฑ์ ๋ ๊ฐ๊น์ต๋๋ค. ์น์ํด์ผ ํ๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ถ์ด ๋ง์ด ์์ต๋๋ค. ๊ฐ์ ํ ์ ์๋ ๋ถ๋ถ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Mui.appBar [
prop.className c.appBar
prop.appBar.position.fixed'
prop.children [
Mui.toolbar [
prop.children [
Mui.typography [
prop.typography.variant.h6
prop.typography.color.inherit'
prop.text (pageTitle model.Page)
]
]
]
]
]
์ด ์ค๋ํซ์ ๊ฐ์ธ์ ์ธ ์๋ฒฝํ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ๋ ๊ฒ์ ๋๋ค.
Mui.appBar [
AppBar.className c.appBar
AppBar.position.fixed'
AppBar.children [
Mui.toolbar [
Toolbar.children [
Mui.typography [
Typography.variant.h6
Typography.color.inherit'
Typygraphy.text (pageTitle model.Page)
]
]
]
]
]
์ด๋ ๊ฒ ํ๋ฉด Mui ์์๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. Mui๋ฅผ "์ ์ผ๋ก ํ์"ํ ์ ์๊ณ ์์๋ฅผ ์ฐพ์ผ๋ฉด( appBar
) ๋ชจ๋ ์ด๋ฆ( AppBar
)์ "์ ์ผ๋ก ํ์"ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ฑ ๋ฑ์ ์ ์ํ๊ธฐ ์ํด
AppBar
๋ ์๋ฌธ์๋ก ์ ์งํ์ญ์์ค.
์์ด๋์ด๋ ์๊ฒ ์ง๋ง ๋ ์ ํํ๊ฒ ๋งํ๋ฉด ์ด API์ ์ผ๋ฐ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ {Element}
๋ ๋ฐ์ ์์์
๋๋ค.
Mui.{element} [
{Element}.{propName}.{propValue}
{Element}.children [
Mui.{otherElem} [
{OtherElem}.{propName}.{propValue}
// etc.
]
]
]
์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ธ์? ์ด API๋ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฉ์ง ๋จ์ ์์ ์์ด๋์ด์ ์๊ฐ์ ์ฃผ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์๋ฒฝํ๋ค๊ณ ์๊ฐํ๊ณ ๋น์ ์ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฒ์์๋ ๋ชจ๋ ๊ฒ์ prop
์๋์ ๋๊ธฐ๋ก ์ ํํ์ง๋ง ๋ฌผ๋ก ์ค์ ๋ก ๊ตฌ์ฑ ์์๋ณ ์ํ์ด ์๋ ๋ฐ๋ฉด MUI์๋ ๊ตฌ์ฑ ์์๋ณ ์ํ์ด ๋ ๋ง์ต๋๋ค.
์๋ฌธ์ ๋ชจ๋ ์ด๋ฆ์ ๊ณ ์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ์ง๋ง(์ถ๊ฐ ํค ์ ๋ ฅ์ ์ ์ฝํ ์ ์์) ๋ฐ๋ก ์ ๋ํด ์ด๋ ค ์์ต๋๋ค.
์ด ํญ๋ชฉ์ ์๋ ์์ฑํ์ฌ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ด ์ข์ต๋๋ค.
์ ๋ฐ์ดํธํ์ฌ ์๋ ค๋๋ฆฝ๋๋ค.
ํนํ ํ ๊ฐ์ง ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ClassName
๋ฌผ๊ฑด์
๋๋ค. makeStyles
ํํฌ๋ ์ ๋ฌ๋ ๊ฒ๊ณผ ๋์ผํ props๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง๋ง ๋ชจ๋ (JSS) ์์๋ ์ฌ์ฉํ ํด๋์ค ์ด๋ฆ์ธ ๋ฌธ์์ด๋ก ๋์ฒด๋์์ต๋๋ค(์: prop.className
).
์ด์ F#์ ์
๋ ฅํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ์ผ๋ก ์์
ํด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํ์ผ ๊ฐ์ฒด์ ๋ชจ๋ ์ํ์ IStyleAttribute list
์
๋๋ค. ์ด๊ฒ์ IStyleAttribute list
prop.className
์ ๋ํ ์ค๋ฒ๋ก๋๋ฅผ ์ถ๊ฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฌผ๋ก ๋ฐํ์์ ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ง๋ง์
๋๋ค. ์ค์ ๋ก IStyleAttribute list
๋ฅผ ์ ๋ฌํ๋ฉด ์คํจํฉ๋๋ค. prop.className
์ธ์๋ ์ด๊ฒ์ ๋ชจ๋ classes.<element>.<classesName>
( <element>.classes [ ... ]
์์ ์ฌ์ฉ๋จ)์๋ ์ ์ฉ๋ฉ๋๋ค. ํด๋์ค ์ด๋ฆ(๋ฌธ์์ด)๋ ํ์ฉํฉ๋๋ค.
๋ณด์๋ค์ํผ ๋ด๊ฐ ํ ์ผ์ ์คํ์ผ ๊ฐ์ฒด์ ๋ชจ๋ IStyleAttribute list
์์ฑ์ asClassName
๋ก "์๊ตฌ"ํ๋ ๊ฒ์
๋๋ค IClassName
(์ํ๋ ๊ฒฝ์ฐ string
์ ๋ํ ํ๋ก์). ๊ทธ๋ฐ ๋ค์ IClassName
prop.className
์ ์ค๋ฒ๋ก๋๋ฅผ ์ถ๊ฐํ๊ณ ๋ชจ๋ classes
์ํ์ด IClassName
์๋ฝํ๋๋ก ํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ ๊ฐ๋ ฅํ๊ฒ ํ์ดํ๋๋ ๊ฒ์ ์ข์ํ์ง๋ง ์ถ๊ฐ ํ์ดํ์ด ํ์ํ๋ค๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค(๋ชจ๋ ์ต์์ CSS ๊ท์น์ ๋ํด asClassName
). ์ปดํ์ผ๋ฌ๋ ๋น์ ์ด ๊ทธ๊ฒ์ ๋์น๋ฉด ๋ถํํ ๊ฒ์ด์ง๋ง, ๊ทธ๊ฒ์ ๋น์ ์๊ฒ ๋ฌด์์ ํด์ผ ํ๋์ง ๋งํ์ง ์์ ๊ฒ์ด๊ณ ์ฌ์ ํ ์ฌ๋ถ์ ์ก์์
๋๋ค.
์ด์ ๋ํ ์๊ฒฌ์ด ์์ต๋๊น?
๋ํ, ๋๋ ์ด๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค:
f#
listItem.divider ((page = Home))
์ฌ๊ธฐ์์ ์ด์ค ๊ดํธ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด F#์ด $# ๋์ Home
๋ก ์ค์ ๋ (์กด์ฌํ์ง ์๋) page
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ $ listItem.divider
๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ ๊ฒ์ผ๋ก ํด์ํ๊ธฐ ๋๋ฌธ์
๋๋ค value
๋งค๊ฐ๋ณ์๊ฐ page = Home
๋ก ์ค์ ๋จ). ๊ทธ๊ฒ์ ํผํ๋ ๋ฐฉ๋ฒ์ด ๋ณด์ด์ญ๋๊น?
์๋ ํ์ธ์ @cmeeren ์ฐ์ , ์ ๋ ์ด ๊ตฌ๋ฌธ์ ์ ๋ง ์ข์ํฉ๋๋ค.
Mui.appBar [
prop.className c.appBar
appBar.position.fixed'
appBar.children [
Mui.toolbar [
toolbar.children [
Mui.typography [
typography.variant.h6
typography.color.inherit'
prop.text (pageTitle model.Page)
]
]
]
]
]
๋ณด๊ธฐ๋งํด๋ ๋๋ฌด ๊น๋ํ๊ณ ์ฌํํด์! ๋ด๊ฐ ๋น์ ์ด์๋ค๋ฉด prop.className ๋์ ์(๋๋ ํจ๊ป) prop.className
appBar.className
์ ๊ฐ์ ๊ตฌ์ฑ ์์๋ณ ์ํ์ ์ผ๋ฐ prop
๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ณต์ ํ์ ๊ฒ์ด๋ฏ๋ก ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ๋์นญ์ ์ผ๋ก ๋ณด์ด์ง๋ง ๋ ์ค์ํ ๊ฒ์ makeStyles
๋ Mui ์ ์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ์ฌ์ฉํ๋ ์ผ๋ฐ prop.className
๋์ Mui ์ ์ฉ ๊ตฌ์ฑ์์์ IClassName
์ค๋ฒ๋ก๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. ๊ตฌ์ฑ ์์์ด๋ฉฐ Mui ๊ตฌ์ฑ ์์์๋ง ์ ์ฉ๋ฉ๋๋ค.
makeStyles
๊ฐ๋ฅํ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์ด๋ ์ง๊ธ ๋น์ฅ์ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๊ฐ๋์ง ์์ต๋๋ค( asClassName
, ์๋ง๋ Styles.createClass
์ ์ด๋ ฌํ ํฌ์ ์๋์ง๋ง
listItem.divider ((page = Home))
์ ๊ดํด์๋ ๊น๋ค๋กญ์ต๋๋ค. ๋๋ฏธ ํจ์ let when (x: bool) = x
๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง ๊ทธ๊ฒ์ ๋จ์ง ๋
ธ์ด์ฆ์
๋๋ค. F# ์ปดํ์ผ๋ฌ๊ฐ ํจ์์ ์ ์ ํ ์ค๋ฒ๋ก๋๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ด์ ๋ฅผ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๋ก ์ ๊ณ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ง์ ์๋ํ์ง๋ ์์์ง๋ง ์๊ฐ์ด ๋๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ ๋ ์ด๋ฒ ์ฃผ์ ํ์์ฒ๋ผ ์๋ตํ์ง ์์ต๋๋ค. ์ง๊ธ ํด๊ฐ ์ค์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ ์ฝ๊ฑฐ๋ ํ์ธํ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋ด๊ฐ ๋น์ ์ด์๋ค๋ฉด ์๋ง๋ prop.className ๋์ ์(๋๋ ํจ๊ป)
prop.className
appBar.className
์ ๊ฐ์ ๊ตฌ์ฑ ์์๋ณ ์ํ์ผ๋ก ์ผ๋ฐprop
๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ณต์ ํ์ ๊ฒ์ด๋ฏ๋ก ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ๋์นญ์ ์ผ๋ก ๋ณด์ด์ง๋ง ๋ ์ค์ํ ๊ฒ์makeStyles
๋ Mui ์ ์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ์ฌ์ฉํ๋ ์ผ๋ฐprop.className
๋์ Mui ์ ์ฉ ๊ตฌ์ฑ์์์IClassName
์ค๋ฒ๋ก๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๊ตฌ์ฑ ์์์ด๋ฉฐ Mui ๊ตฌ์ฑ ์์์๋ง ์ ์ฉ๋ฉ๋๋ค.
์ง๊ธ ํ์ธํด๋ณด์ธ์ :) ์ง๋ ๋ช ์ผ๊ฐ ๊ณผ๊ฐํ ๊ฐ์ ๊ณผ ํ์ฅ์ ํ๊ณ ๊ทธ๋ฅ ๋ฐ์ด๋ฃ์์ต๋๋ค(์๋ฃ๋์ง ์์์ต๋๋ค. ํ์ฌ ์์ฑ๋ props๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ํ๊ธฐ ์ํด ๋ชจ๋ MUI ๊ตฌ์ฑ ์์๋ฅผ ์ดํด๋ณด๊ณ ์์ต๋๋ค).
makeStyles
๊ฐ๋ฅํ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์ด๋ ์ง๊ธ ๋น์ฅ์ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๊ฐ๋์ง ์์ต๋๋ค(asClassName
, ์๋ง๋Styles.createClass
์ ์ด๋ ฌํ ํฌ์ ์๋์ง๋ง ๋์
๋ง์ด ์ฐ์ด๊ฒ ๋ ๊ฒ ๊ฐ์์ ์ต๋ํ ์งง๊ฒ ํ๊ณ ์ถ์ง๋ง, ๋ค๋ฅธ ์ด๋ฆ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋๋ ๋จ์ง IStyleAttribute list
๊ณผ๋ถํ๋ฅผ ๊ฐ์ง ์๊ฐ์ด ์ ๋ฐ์ด ์์ง๋ง. ์ ์ฌ์ ์ผ๋ก ์๋นํ ์์์ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ๊ธฐ์ ์ ์ผ๋ก ์๋ชป ์ฌ์ฉํ ์ ์๋๋ผ๋ ๋งค์ฐ ์ํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
listItem.divider ((page = Home))
์ ๊ดํด์๋ ๊น๋ค๋กญ์ต๋๋ค. ๋๋ฏธ ํจ์let when (x: bool) = x
๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง ๊ทธ๊ฒ์ ๋จ์ง ๋ ธ์ด์ฆ์ ๋๋ค. F# ์ปดํ์ผ๋ฌ๊ฐ ํจ์์ ์ ์ ํ ์ค๋ฒ๋ก๋๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ด์ ๋ฅผ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๋ก ์ ๊ณ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ง์ ์๋ํ์ง๋ ์์์ง๋ง ์๊ฐ์ด ๋๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ต๋๋ค: https://github.com/dotnet/fsharp/issues/7423
๋ง์ง๋ง์ผ๋ก ์ ๋ ์ด๋ฒ ์ฃผ์ ํ์์ฒ๋ผ ์๋ตํ์ง ์์ต๋๋ค. ์ง๊ธ ํด๊ฐ ์ค์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ ์ฝ๊ฑฐ๋ ํ์ธํ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋ฌธ์ ์์ต๋๋ค. ๋๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๊ณ์ํด์ ๋ฌธ์ ๋ฅผ ๊ฒ์ํ ๊ฒ์ด๊ณ ๋น์ ์ ๋น์ ์ ์๊ฐ์ ๋ต์ฅ์ ๋ณด๋ด์ญ์์ค.
์ง๊ธ ํ์ธํด๋ณด์ธ์ :) ์ง๋ ๋ช ์ผ๊ฐ ๊ณผ๊ฐํ ๊ฐ์ ๊ณผ ํ์ฅ์ ํ๊ณ ๊ทธ๋ฅ ๋ฐ์ด๋ฃ์์ต๋๋ค(์๋ฃ๋์ง ์์์ต๋๋ค. ํ์ฌ ์์ฑ๋ props๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ํ๊ธฐ ์ํด ๋ชจ๋ MUI ๊ตฌ์ฑ ์์๋ฅผ ์ดํด๋ณด๊ณ ์์ต๋๋ค).
์์ฑ๋ ๋ฌธ์์ ํจ๊ป ์ ๋ง ์ข์ ๋ณด์ ๋๋ค ๐ ์ด์ฉ๋ฉด ์์ฒด ์ ์ฅ์์ ๋ฃ์ ์๊ฐ์ด ์์ต๋๊น?
๋ง์ด ์ฐ์ด๊ฒ ๋ ๊ฒ ๊ฐ์์ ์ต๋ํ ์งง๊ฒ ํ๊ณ ์ถ์ง๋ง, ๋ค๋ฅธ ์ด๋ฆ๋ ๊ฐ๋ฅํฉ๋๋ค. IStyleAttribute ๋ชฉ๋ก ์ค๋ฒ๋ก๋๋ฅผ ๊ฐ๊ณ ์ถ๋ค๋ ์๊ฐ์ ๋ฐ์ฏค ๊ฐ์ง๊ณ ์์ง๋ง. ์ ์ฌ์ ์ผ๋ก ์๋นํ ์์์ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ๊ธฐ์ ์ ์ผ๋ก ์๋ชป ์ฌ์ฉํ ์ ์๋๋ผ๋ ๋งค์ฐ ์ํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๊ฒ๋ ์๋ํฉ๋๋ค. Fable ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํญ์ ์ ํ ์์คํ ์ ์์ ๋๋ค ;)
๊ฐ์ฌํฉ๋๋ค. ์ง๊ธ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ต๋๋ค: dotnet/fsharp#7423
์์ฒญ๋! ์ ๋ง ๊ฐ์ฌํฉ๋๋ค
์์ฑ๋ ๋ฌธ์์ ํจ๊ป ์ ๋ง ์ข์ ๋ณด์ ๋๋ค ๐ ์ด์ฉ๋ฉด ์์ฒด ์ ์ฅ์์ ๋ฃ์ ์๊ฐ์ด ์์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ง๋ง ์ฌ์ ํ ๋ช ๊ฐ์ง ์ค์ํ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค(์: #27). ๋ชจ๋ ๊ฒ์ ๊ฐ์ ์ฅ์์ ๋๋ ํธ๋ฆฌํจ์ผ๋ก ํ์ ํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ์ด๋ฏ๋ก ์ค๋น๋ ๋๊น์ง ๊ฑฐ๊ธฐ์ ๋ณด๊ดํ ๊ฒ์ ๋๋ค. nuget์ ํ๋ฆฌ๋ฆด๋ฆฌ์ฆ์ฉ(๋๋ฌด ๊ธธ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค).
@Zaid-Ajaj Feliz.MaterialUI ์์ ์ด ๊ฑฐ์ ๋๋ฌ์ต๋๋ค. ๊ณง ๋ณ๋์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฒ์ํ ์์ ์ ๋๋ค. ๋จผ์ ๊ฒํ ํ์ฌ ์ผ๋ถ ๋์์ธ ๊ฒฐ์ ์ ํ์ธํ๊ณ Feliz์์ ์ผ๊ด์ฑ์ ํ์ธํ๊ณ ์ผ๋ถ ๊ตฌํ ํญ๋ชฉ(์: ๋ด๋ถ์์ ๋ง๋ค ํญ๋ชฉ์ ์ฌ์ฉํ๊ณ ์๋์ง, ์๋๋ฉด Feliz์์ ์ฌ์ฉํ์ง ์์ง๋ง ์ฌ์ฉํด์ผ ํจ).
์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค ๋ ๊ฒํ ํ๊ณ ์ถ์ ๋ด์ฉ์ ์ค๋ช ํ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ํ๊ทธ๋ฅผ ์ง์ ํด๋ ๊ด์ฐฎ์ต๋๊น?
์ด์ Feliz.MaterialUI ์ด์์ cmeeren/Feliz.MaterialUI ์ ์ ๋ก๋ํ์ต๋๋ค. ๊ฒํ ํ๊ณ ์ถ์ ์ฌํญ์ ๋ํด ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์๊ฐ์ ๋ด์ ๋ด์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
๊ฐ ๋ฌธ์ ์ ๋ง์ ์๊ฐ์ ํ ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด์ ์๊ฒฌ์์ ์ธ๊ธํ ์ด์ ๋ก ๋ ๋ฒ์งธ ์๊ฒฌ์ ์ํฉ๋๋ค. ์ํ๋ค๋ฉด ์ก์ด ์์ผ๋ก ๋ค์ด๊ฐ๋ ์ข๊ฒ ์ง๋ง "์ด๊ฑด ๊ด์ฐฎ์ ๋ณด์ธ๋ค"๋ ๊ฒ๋ง์ผ๋ก๋ ์ข๊ฒ ์ด.
๋ฌผ๋ก ์๋๋ฅด์ง๋ ์์ต๋๋ค. :)
๋ฉ์ง ์ํ @cmeeren! ์ธ๋ป๋ณด๊ธฐ์ ๋ฐ์ธ๋ฉ์ ๋งค์ฐ ๊นจ๋ํด ๋ณด์ ๋๋ค. ์์ผ๋ก ๋ฉฐ์น ๋์ ๊ฐ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฝ์ํฉ๋๋ค.์ค๋ง์ผ:
์ด๋ด! ๋ฌธ์ ๋ฅผ ๊ณ์ ๋ณผ ๊ธฐํ๊ฐ ์์ต๋๊น? ๋ค์ ํ ๋ฒ ์๋๋ฅด์ง ๋ง์ธ์. ๋ช ์ฃผ ๋์ ์ฐ๋ฝ์ด ์์๊ธฐ ๋๋ฌธ์ ์น์ ํ ์๋ฆผ์ ๋๋ค ๐
์ค์ ๋ก ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์์ง๋ง ์ด์ ์ ๋งํ๋ฏ์ด API๊ฐ ์ข์์ง ์๋์ง๋ ์ฌ์ฉ ์ฌ๋ก์์ ๋์ค๋ ๊ฒ์ด๋ฏ๋ก ์๋ํด ๋ณผ ์ ์๋๋ก ์ํ ๋ฒ์ ์ ๊ฒ์ํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ง๋ง ์์ง ์๊ฐ์ ์์ง ์ ๋๋ค(์ด๋ฒ ์ฃผ ์๊ฐ์ด ๋ฌ์ต๋๋ค :์ค๋ง์ผ :)
@cmeeren๋ , ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค. ๋ง์ต๋๊น? ๋๋ ๋ฌธ์ ๋ฅผ ๋ซ์ ๊ฒ์ ๋๋ค, ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ํ ๋ก ์ ์ํด ๋ค์ ์ฝ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@cmeeren๋ , ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค. ๋ง์ต๋๊น? ๋๋ ๋ฌธ์ ๋ฅผ ๋ซ์ ๊ฒ์ ๋๋ค, ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ํ ๋ก ์ ์ํด ๋ค์ ์ฝ๋๋ค