โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๊ทผ๋ณธ์ ์ผ๋ก JSX๋ React.createElement(component, props, ...children)
ํจ์์ ๋ํ ๋ฌธ๋ฒ์ ์คํ์ ์ ๊ณตํ ๋ฟ์ด๋ค.
<MyButton color="blue" shadowSize={2}>
Click Me
</MyButton>
์์ ์ฝ๋๋ ์๋์ ๊ฐ์ด ์ปดํ์ผ๋ฉ๋๋ค.
React.createElement(
MyButton,
{color: 'blue', shadowSize: 2},
'Click Me'
)
JSX ํ๊ทธ์ ์ฒซ ๋ถ๋ถ์ React element์ ํ์ ์ ๊ฒฐ์ ํ๋ค.
๋๋ฌธ์๋ก ์์ํ๋ JSX ํ๊ทธ๋ React ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํ๋ค. ์ด ํ๊ทธ๋ค์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๋ณ์๋ค์ ์ง์ ์ฐธ์กฐํ๋ค.
JSX๋ React.createElement๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ก ์ปดํ์ผ ๋๊ธฐ ๋๋ฌธ์ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญ์ JSX์ฝ๋์ ๊ฐ์ ์ค์ฝํ ๋ด์ ์กด์ฌํด์ผ ํ๋ค.
์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ React ์ปดํฌ๋ํธ๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ํ๋์ ๋ชจ๋์์ ๋ณต์์ React ์ปดํฌ๋ํธ๋ค์ export ํ๋ ๊ฒฝ์ฐ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
import React from 'react';
const MyComponents = {
DatePicker: function DatePicker(props) {
return <div>Imagine a {props.color} datepicker here.</div>;
}
}
function BlueDatePicker() {
return <MyComponents.DatePicker color="blue" />;
}
๋๋ฌธ์๋ก ์์ํ๋ ํ์
๋ค์ React.createElement(Foo)
์ ํํ๋ก ์ปดํ์ผ๋๋ฉฐ JavaScript ํ์ผ ๋ด์ ์ฌ์ฉ์๊ฐ ์ ์ํ๊ฑฐ๋ importํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
React element ํ์ ์ ์ผ๋ฐ์ ์ธ ํํ์์ ์ฌ์ฉํ ์ ์๋ค. element ํ์ ์ ์ง์ ํ ๋ ์ผ๋ฐ์ ์ธ ํํ์์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋๋ฌธ์๋ก ์์ํ๋ ๋ณ์์ ๋ฐฐ์ ํ ํ ์ฌ์ฉํ ์ ์๋ค.
import React from 'react';
import { PhotoStory, VideoStory } from './stories';
const components = {
photo: PhotoStory,
video: VideoStory
};
function Story(props) {
// JSXํ์
์ ํํ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
// return <components[props.storyType] story={props.story} />;
// ์๋์ฒ๋ผ ๋ณ์์ ์ง์ ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
const SpecificStory = components[props.storyType];
return <SpecificStory story={props.story} />;
}
<MyComponent foo={1 + 2 + 3 + 4} />
// ๋์ผํ ํํ
<MyComponent message="hello world" />
<MyComponent message={'hello world'} />
// ๋์ผํ ํํ
<MyTextBox autocomplete />
<MyTextBox autocomplete={true} />
์ผ๋ฐ์ ์ผ๋ก prop์ ๋ํ ๊ฐ์ ์ ๋ฌํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค๊ณ ํ๋ค.
props์ ํด๋นํ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ค๋ฉด ...
๋ฅผ ์ ๊ฐ ์ฐ์ฐ์๋ก ์ฌ์ฉํด ์ ์ฒด ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ์ค ์ ์๋ค.
// ๋์ผํ ํํ
function App1() {
return <Greeting firstName="Ben" lastName="Hector" />;
}
function App2() {
const props = {firstName: 'Ben', lastName: 'Hector'};
return <Greeting {...props} />;
}
// ์๋์ฒ๋ผ๋ ์ฌ์ฉ ๊ฐ๋ฅ
const { kind, ...other } = props;
const className = kind === "primary" ? "PrimaryButton" : "SecondaryButton";
return <button className={className} {...other} />;
์ ๊ฐ ์ฐ์ฐ์๋ ๊ผญ ํ์ํ ๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ๋ถํ์ํ prop์ด๋ ์ ํจํ์ง ์์ HTML ์์ฑ๋ค์ DOM์ ๋๊ธฐ๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ์ props.children
์ด๋ผ๋ ํน์ํ prop์ผ๋ก ๋๊ฒจ์ง๋ค.
<MyComponent>Hello world!</MyComponent>
์ฌ๊ธฐ์ MyComponent
์ props.children
์ โHello world!โ์ด๋ค.
JSX element๋ฅผ ์์์ผ๋ก ๋๊ฒจ์ค ์ ์๋ค.
<MyContainer>
<MyFirstComponent />
<MySecondComponent />
</MyContainer>
๋ํ element๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋ฐํํ ์ ์๋ค.
render() {
// ๋ฆฌ์คํธ ์์ดํ
๋ค์ ์ถ๊ฐ์ ์ธ ์๋ฆฌ๋จผํธ๋ก ๋๋ฌ์ ํ์ ์์ต๋๋ค!
return [
// key ์ง์ ์ ์์ง ๋ง์ธ์ :)
<li key="A">First item</li>,
<li key="B">Second item</li>,
<li key="C">Third item</li>,
];
}
// ๋์ผํ ํํ
<MyComponent>foo</MyComponent>
<MyComponent>{'foo'}</MyComponent>
๋ณดํต JSX์ ์ฝ์
๋ JavaScript ํํ์์ ๋ฌธ์์ด, React element ํน์ ์ด๋ค์ ๋ฐฐ์ด๋ก ํ์ฐ๋๋ค. props.children
์ ๋ค๋ฅธ prop๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก React๊ฐ ๋ ๋๋ง ํ ์ ์๋ ๋ฐ์ดํฐ์ ํํ๋ฟ๋ง ์๋๋ผ ์ด๋ค ํํ์ ๋ฐ์ดํฐ๋ ๋๊ฒจ์ง ์ ์๋ค.
// ์์ ์ฝ๋ฐฑ์ธ numTimes๋ฅผ ํธ์ถํ์ฌ ๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค.
function Repeat(props) {
let items = [];
for (let i = 0; i < props.numTimes; i++) {
items.push(props.children(i));
}
return <div>{items}</div>;
}
function ListOfTenThings() {
return (
<Repeat numTimes={10}>
{(index) => <div key={index}>This is item {index} in the list</div>}
</Repeat>
);
}
// ๋์ผํ๊ฒ ๋ ๋๋ง
<div />
<div></div>
<div>{false}</div>
<div>{null}</div>
<div>{undefined}</div>
<div>{true}</div>
React element๋ค์ ์กฐ๊ฑด๋ถ ๋ ๋๋งํ ๋ ์ ์ฉํ๋ค. ํ๊ฐ์ง ์ฃผ์ํ ์ ์ 0๊ณผ ๊ฐ์ falsyํ ๊ฐ๋ค์ React๊ฐ ๋ ๋๋ง ํ๋ค๋ ์ ์ด๋ค.
// ์๋ ์์๋ props.message๊ฐ ๋ฐฐ์ด์ผ ๋ 0์ ์ถ๋ ฅํ๋ค.
<div>
{props.messages.length &&
<MessageList messages={props.messages} />
}
</div>
์ ์ฒด์ ์ผ๋ก ๋ณต์ตํ๋ ๋๋์ผ๋ก ์ฝ์๊ณ ํ๋ ์ ๋๋ก ๊ฐ๋ ์ ์ก๊ฒ ๋ ๋ถ๋ถ์ ์ผ๋ฐ์ ์ผ๋ก prop์ ๋ํ ๊ฐ์ ์ ๋ฌํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค๋ ๋ถ๋ถ์ด๋ค. ๊ทธ๋์ true๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ prop๊ฐ์ ์ ๋ฌํ์ง ์์๋ ๊ฒฝ์ฐ๊ฐ ์์๋๋ฐ ์์ผ๋ก ์ธ์งํ๊ณ ์ฌ์ฉํด์ผ๊ฒ ๋ค.