createFactory
createFactory
๋ ํน์ type์ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋๋ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
const factory = createFactory(type)
๋ ํผ๋ฐ์ค
createFactory(type)
์ฃผ์ด์ง type
์ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์ด ๋ด๋ ํฉํ ๋ฆฌ ํจ์๋ฅผ ์์ฑํ๊ธฐ ์ํด createFactory(type)
๋ฅผ ํธ์ถํ์ธ์.
import { createFactory } from 'react';
const button = createFactory('button');
์ดํ JSX ์์ด React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
export default function App() {
return button({
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}
์๋์์ ๋ ๋ง์ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
๋งค๊ฐ๋ณ์
type
:type
์ ๋ฐ๋์ ์ ํจํ React ์ปดํฌ๋ํธ type์ด์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๊ทธ ์ด๋ฆ ๋ฌธ์์ด('div'
๋'span'
) ํน์ React ์ปดํฌ๋ํธ(ํจ์ ์ปดํฌ๋ํธ, ํด๋์ค ์ปดํฌ๋ํธ,Fragment
์ ๊ฐ์ ํน๋ณํ ์ปดํฌ๋ํธ)๊ฐ ๋ ์ ์์ต๋๋ค.
๋ฐํ ๊ฐ
ํฉํ ๋ฆฌ ํจ์๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ํจ์๋ ์์ ์ธ์์ ๋ฆฌ์คํธ์ ๋ค์ด์ด, ์ฒซ ๋ฒ์งธ ์ธ์๋ก props
๊ฐ์ฒด๋ฅผ ๋ฐ์ผ๋ฉฐ, ์ฃผ์ด์ง types
, props
๊ทธ๋ฆฌ๊ณ ์์
์ ๊ฐ์ง React ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ๋ฒ
ํฉํ ๋ฆฌ ํจ์๋ก React ์๋ฆฌ๋จผํธ ๋ง๋ค๊ธฐ
๋น๋ก ๋๋ถ๋ถ์ React ํ๋ก์ ํธ๋ค์ JSX๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ์ธํฐํ์ด์ค๋ฅผ ํํํ์ง๋ง, JSX๊ฐ ํ์๋ ์๋๋๋ค. ๊ณผ๊ฑฐ์๋ createFactory
๋ฅผ JSX ์์ด ์ ์ ์ธํฐํ์ด์ค๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ํ๋๋ก ์ฌ์ฉํ์์ต๋๋ค.
button
๊ณผ ๊ฐ์ด ํน์ ์๋ฆฌ๋จผํธ type์ ๋ฐํํ๋ ํฉํ ๋ฆฌ ํจ์๋ฅผ ์์ฑํ๊ธฐ ์ํด createFactory
๋ฅผ ํธ์ถํฉ๋๋ค.
import { createFactory } from 'react';
const button = createFactory('button');
๊ทธ ๋ค์, ์ ๊ณต๋ props์ ์์์ผ๋ก React ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์ด๋ด๋ ํฉํ ๋ฆฌ ํจ์๋ฅผ ์คํํฉ๋๋ค.
import { createFactory } from 'react'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); }
์ด๋ createFactory
์ JSX์ ๋์์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ง๋ง createFactory
๋ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์ดํ ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ ๋ createFactory
๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํฉ๋๋ค. ์๋์์ createFactory
๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ดํด๋ณด์ธ์.
๋์
ํ๋ก์ ํธ์ createFactory
๋ณต์ฌํ๊ธฐ
๋ง์ฝ ํ๋ก์ ํธ์ createFactory
๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ค๋ฉด, ๋ค์์ createFactory.js
๋ด์ฉ์ ํ๋ก์ ํธ ๋ด๋ถ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณต์ฌํ์ธ์.
import { createFactory } from './createFactory.js'; const button = createFactory('button'); export default function App() { return button({ onClick: () => { alert('Clicked!') } }, 'Click me'); }
์ด๋ฌํ ์์ ์ ํตํด, import ๋ฌธ์ ์ ์ธํ๊ณ ๋ค๋ฅธ ์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์์ ์ํ๋ก ์ ์งํ ์ ์์ต๋๋ค.
createFactory
๋ฅผ createElement
๋ก ๋์ฒดํ๊ธฐ
์ง์ ์ฎ๊ฒจ์๋ ๋ฌด๋ฐฉํ ์ ๋๋ก createFactory
๋ฅผ ๋ช ๊ฐ๋ง ํธ์ถํ๊ณ ์๊ณ JSX๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด, createElement
๋ฅผ ์คํํ์ฌ ํฉํ ๋ฆฌ ํจ์๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด ์ฝ๋๋,
import { createFactory } from 'react';
const button = createFactory('button');
export default function App() {
return button({
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}
์๋์ ๊ฐ์ด ๋ฐ๊ฟ ์ ์์ต๋๋ค.
import { createElement } from 'react';
export default function App() {
return createElement('button', {
onClick: () => {
alert('Clicked!')
}
}, 'Click me');
}
์ต์ข ์ ์ผ๋ก JSX ์์ด React๋ฅผ ์ฌ์ฉํ๋ ์์์ ๋๋ค.
import { createElement } from 'react'; export default function App() { return createElement('button', { onClick: () => { alert('Clicked!') } }, 'Click me'); }
createFactory
๋ฅผ JSX๋ก ๋์ฒดํ๊ธฐ
๋ง์ง๋ง์ผ๋ก createFactory
๋์ JSX๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ React๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ์ฅ ํํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
export default function App() { return ( <button onClick={() => { alert('Clicked!'); }}> Click me </button> ); };