State and Lifecycle
These docs are old and wonโt be updated. Go to react.dev for the new React docs.
These new documentation pages teach modern React and include live examples:
์ด ํ์ด์ง๋ React ์ปดํฌ๋ํธ ์์ state์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ๊ฐ๋ ์ ์๊ฐํด ์ค๋๋ค. ์์ธํ ์ปดํฌ๋ํธ API ๋ ํผ๋ฐ์ค๋ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด์ ์น์
์์ ๋ค๋ค๋ณธ ์งธ๊น๊ฑฐ๋ฆฌ๋ ์๊ณ ์์๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฆฌ๋จผํธ ๋ ๋๋ง์์๋ UI๋ฅผ ์
๋ฐ์ดํธํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ๋ง ๋ฐฐ์ ์ผ๋ฉฐ, ๋ ๋๋ง ๋ ์ถ๋ ฅ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด root.render()๋ฅผ ํธ์ถํ์ต๋๋ค.
const root = ReactDOM.createRoot(document.getElementById('root'));
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
root.render(element);}
setInterval(tick, 1000);์ด ์น์
์์๋ Clock ์ปดํฌ๋ํธ๋ฅผ ์์ ํ ์ฌ์ฌ์ฉํ๊ณ ์บก์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์
๋๋ค. ์ด ์ปดํฌ๋ํธ๋ ์ค์ค๋ก ํ์ด๋จธ๋ฅผ ์ค์ ํ ๊ฒ์ด๊ณ ๋งค์ด ์ค์ค๋ก ์
๋ฐ์ดํธํ ๊ฒ์
๋๋ค.
์๊ณ๊ฐ ์๊ธด ๊ฒ์ ๋ฐ๋ผ ์บก์ํํ๋ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค.
const root = ReactDOM.createRoot(document.getElementById('root'));
function Clock(props) {
return (
<div> <h1>Hello, world!</h1> <h2>It is {props.date.toLocaleTimeString()}.</h2> </div> );
}
function tick() {
root.render(<Clock date={new Date()} />);}
setInterval(tick, 1000);๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์ค์ํ ์๊ฑด์ด ๋๋ฝ๋์ด ์์ต๋๋ค. Clock์ด ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ๋งค์ด UI๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒ์ด Clock์ ๊ตฌํ ์ธ๋ถ์ฌํญ์ด ๋์ด์ผ ํฉ๋๋ค.
์ด์์ ์ผ๋ก ํ ๋ฒ๋ง ์ฝ๋๋ฅผ ์์ฑํ๊ณ Clock์ด ์ค์ค๋ก ์
๋ฐ์ดํธํ๋๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
root.render(<Clock />);์ด๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด์ Clock ์ปดํฌ๋ํธ์ โstateโ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
State๋ props์ ์ ์ฌํ์ง๋ง, ๋น๊ณต๊ฐ์ด๋ฉฐ ์ปดํฌ๋ํธ์ ์ํด ์์ ํ ์ ์ด๋ฉ๋๋ค.
ํจ์์์ ํด๋์ค๋ก ๋ณํํ๊ธฐ
๋ค์ฏ ๋จ๊ณ๋ก Clock๊ณผ ๊ฐ์ ํจ์ ์ปดํฌ๋ํธ๋ฅผ ํด๋์ค๋ก ๋ณํํ ์ ์์ต๋๋ค.
React.Component๋ฅผ ํ์ฅํ๋ ๋์ผํ ์ด๋ฆ์ ES6 class๋ฅผ ์์ฑํฉ๋๋ค.render()๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋น ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.- ํจ์์ ๋ด์ฉ์
render()๋ฉ์๋ ์์ผ๋ก ์ฎ๊น๋๋ค. render()๋ด์ฉ ์์ ์๋props๋ฅผthis.props๋ก ๋ณ๊ฒฝํฉ๋๋ค.- ๋จ์์๋ ๋น ํจ์ ์ ์ธ์ ์ญ์ ํฉ๋๋ค.
class Clock extends React.Component {
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.props.date.toLocaleTimeString()}.</h2>
</div>
);
}
}Clock์ ์ด์ ํจ์๊ฐ ์๋ ํด๋์ค๋ก ์ ์๋ฉ๋๋ค.
render ๋ฉ์๋๋ ์
๋ฐ์ดํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ํธ์ถ๋์ง๋ง, ๊ฐ์ DOM ๋
ธ๋๋ก <Clock />์ ๋ ๋๋งํ๋ ๊ฒฝ์ฐ Clock ํด๋์ค์ ๋จ์ผ ์ธ์คํด์ค๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ก์ปฌ state์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
ํด๋์ค์ ๋ก์ปฌ State ์ถ๊ฐํ๊ธฐ
์ธ ๋จ๊ณ์ ๊ฑธ์ณ์ date๋ฅผ props์์ state๋ก ์ด๋ํด ๋ณด๊ฒ ์ต๋๋ค.
render()๋ฉ์๋ ์์ ์๋this.props.date๋ฅผthis.state.date๋ก ๋ณ๊ฒฝํฉ๋๋ค.
class Clock extends React.Component {
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2> </div>
);
}
}- ์ด๊ธฐ
this.state๋ฅผ ์ง์ ํ๋ class constructor๋ฅผ ์ถ๊ฐํฉ๋๋ค.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()}; }
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}์ฌ๊ธฐ์ ์ด๋ป๊ฒ props๋ฅผ ๊ธฐ๋ณธ constructor์ ์ ๋ฌํ๋์ง ์ ์ํด์ฃผ์ธ์.
constructor(props) {
super(props); this.state = {date: new Date()};
}ํด๋์ค ์ปดํฌ๋ํธ๋ ํญ์ props๋ก ๊ธฐ๋ณธ constructor๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
<Clock />์์์์dateprop์ ์ญ์ ํฉ๋๋ค.
root.render(<Clock />);ํ์ด๋จธ ์ฝ๋๋ ๋์ค์ ๋ค์ ์ปดํฌ๋ํธ๋ก ์ถ๊ฐํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
class Clock extends React.Component {
constructor(props) { super(props); this.state = {date: new Date()}; }
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2> </div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);๋ค์์ผ๋ก Clock์ด ์ค์ค๋ก ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ๋งค์ด ์ค์ค๋ก ์
๋ฐ์ดํธํ๋๋ก ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํด๋์ค์ ์ถ๊ฐํ๊ธฐ
๋ง์ ์ปดํฌ๋ํธ๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ๊ฐ ์ญ์ ๋ ๋ ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉ ์ค์ด๋ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Clock์ด ์ฒ์ DOM์ ๋ ๋๋ง ๋ ๋๋ง๋ค ํ์ด๋จธ๋ฅผ ์ค์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๊ฒ์ React์์ โ๋ง์ดํ
โ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ํ Clock์ ์ํด ์์ฑ๋ DOM์ด ์ญ์ ๋ ๋๋ง๋ค ํ์ด๋จธ๋ฅผ ํด์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๊ฒ์ React์์ โ์ธ๋ง์ดํ
โ์ด๋ผ๊ณ ํฉ๋๋ค.
์ปดํฌ๋ํธ ํด๋์ค์์ ํน๋ณํ ๋ฉ์๋๋ฅผ ์ ์ธํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๊ฑฐ๋ ์ธ๋ง์ดํธ ๋ ๋ ์ผ๋ถ ์ฝ๋๋ฅผ ์๋ํ ์ ์์ต๋๋ค.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() { }
componentWillUnmount() { }
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}์ด๋ฌํ ๋ฉ์๋๋ค์ โ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋โ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
componentDidMount() ๋ฉ์๋๋ ์ปดํฌ๋ํธ ์ถ๋ ฅ๋ฌผ์ด DOM์ ๋ ๋๋ง ๋ ํ์ ์คํ๋ฉ๋๋ค. ์ด ์ฅ์๊ฐ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ธฐ์ ์ข์ ์ฅ์์
๋๋ค.
componentDidMount() {
this.timerID = setInterval( () => this.tick(), 1000 ); }this (this.timerID)์์ ์ด๋ป๊ฒ ํ์ด๋จธ ID๋ฅผ ์ ๋๋ก ์ ์ฅํ๋์ง ์ฃผ์ํด์ฃผ์ธ์.
this.props๊ฐ React์ ์ํด ์ค์ค๋ก ์ค์ ๋๊ณ this.state๊ฐ ํน์ํ ์๋ฏธ๊ฐ ์์ง๋ง, ํ์ด๋จธ ID์ ๊ฐ์ด ๋ฐ์ดํฐ ํ๋ฆ ์์ ํฌํจ๋์ง ์๋ ์ด๋ค ํญ๋ชฉ์ ๋ณด๊ดํ ํ์๊ฐ ์๋ค๋ฉด ์์ ๋กญ๊ฒ ํด๋์ค์ ์๋์ผ๋ก ๋ถ๊ฐ์ ์ธ ํ๋๋ฅผ ์ถ๊ฐํด๋ ๋ฉ๋๋ค.
componentWillUnmount() ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋ ์์ ์๋ ํ์ด๋จธ๋ฅผ ๋ถํดํด ๋ณด๊ฒ ์ต๋๋ค.
componentWillUnmount() {
clearInterval(this.timerID); }๋ง์ง๋ง์ผ๋ก Clock ์ปดํฌ๋ํธ๊ฐ ๋งค์ด ์๋ํ๋๋ก ํ๋ tick()์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ์ปดํฌ๋ํธ ๋ก์ปฌ state๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด this.setState()๋ฅผ ์ฌ์ฉํฉ๋๋ค.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() { this.setState({ date: new Date() }); }
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);์ด์ ์๊ณ๋ ๋งค์ด ์งธ๊น๊ฑฐ๋ฆฝ๋๋ค.
ํ์ฌ ์ด๋ค ์ํฉ์ด๊ณ ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋๋์ง ์์๋๋ก ๋น ๋ฅด๊ฒ ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค.
<Clock />๊ฐroot.render()๋ก ์ ๋ฌ๋์์ ๋ React๋Clock์ปดํฌ๋ํธ์ constructor๋ฅผ ํธ์ถํฉ๋๋ค.Clock์ด ํ์ฌ ์๊ฐ์ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ฌ ์๊ฐ์ด ํฌํจ๋ ๊ฐ์ฒด๋กthis.state๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๋์ค์ ์ด state๋ฅผ ์ ๋ฐ์ดํธํ ๊ฒ์ ๋๋ค.- React๋
Clock์ปดํฌ๋ํธ์render()๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด React๋ ํ๋ฉด์ ํ์๋์ด์ผ ํ ๋ด์ฉ์ ์๊ฒ ๋ฉ๋๋ค. ๊ทธ ๋ค์ React๋Clock์ ๋ ๋๋ง ์ถ๋ ฅ๊ฐ์ ์ผ์น์ํค๊ธฐ ์ํด DOM์ ์ ๋ฐ์ดํธํฉ๋๋ค. Clock์ถ๋ ฅ๊ฐ์ด DOM์ ์ฝ์ ๋๋ฉด, React๋componentDidMount()์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ ์์์Clock์ปดํฌ๋ํธ๋ ๋งค์ด ์ปดํฌ๋ํธ์tick()๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ํ์ด๋จธ๋ฅผ ์ค์ ํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์์ฒญํฉ๋๋ค.- ๋งค์ด ๋ธ๋ผ์ฐ์ ๊ฐ
tick()๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ ์์์Clock์ปดํฌ๋ํธ๋setState()์ ํ์ฌ ์๊ฐ์ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ฉด์ UI ์ ๋ฐ์ดํธ๋ฅผ ์งํํฉ๋๋ค.setState()ํธ์ถ ๋๋ถ์ React๋ state๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ์ธ์งํ๊ณ ํ๋ฉด์ ํ์๋ ๋ด์ฉ์ ์์๋ด๊ธฐ ์ํดrender()๋ฉ์๋๋ฅผ ๋ค์ ํธ์ถํฉ๋๋ค. ์ด ๋render()๋ฉ์๋ ์์this.state.date๊ฐ ๋ฌ๋ผ์ง๊ณ ๋ ๋๋ง ์ถ๋ ฅ๊ฐ์ ์ ๋ฐ์ดํธ๋ ์๊ฐ์ ํฌํจํฉ๋๋ค. React๋ ์ด์ ๋ฐ๋ผ DOM์ ์ ๋ฐ์ดํธํฉ๋๋ค. Clock์ปดํฌ๋ํธ๊ฐ DOM์ผ๋ก๋ถํฐ ํ ๋ฒ์ด๋ผ๋ ์ญ์ ๋ ์ ์ด ์๋ค๋ฉด React๋ ํ์ด๋จธ๋ฅผ ๋ฉ์ถ๊ธฐ ์ํดcomponentWillUnmount()์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
State๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๊ธฐ
setState()์ ๋ํด์ ์์์ผ ํ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ง์ State๋ฅผ ์์ ํ์ง ๋ง์ธ์
์๋ฅผ ๋ค์ด, ์ด ์ฝ๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์์ต๋๋ค.
// Wrong
this.state.comment = 'Hello';๋์ ์ setState()๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// Correct
this.setState({comment: 'Hello'});this.state๋ฅผ ์ง์ ํ ์ ์๋ ์ ์ผํ ๊ณต๊ฐ์ ๋ฐ๋ก constructor์
๋๋ค.
State ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ ์๋ ์์ต๋๋ค.
React๋ ์ฑ๋ฅ์ ์ํด ์ฌ๋ฌ setState() ํธ์ถ์ ๋จ์ผ ์
๋ฐ์ดํธ๋ก ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
this.props์ this.state๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ state๋ฅผ ๊ณ์ฐํ ๋ ํด๋น ๊ฐ์ ์์กดํด์๋ ์ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์ฝ๋๋ ์นด์ดํฐ ์ ๋ฐ์ดํธ์ ์คํจํ ์ ์์ต๋๋ค.
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});์ด๋ฅผ ์์ ํ๊ธฐ ์ํด ๊ฐ์ฒด๋ณด๋ค๋ ํจ์๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๋ ๋ค๋ฅธ ํํ์ setState()๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ ํจ์๋ ์ด์ state๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์๋ค์ผ ๊ฒ์ด๊ณ , ์
๋ฐ์ดํธ๊ฐ ์ ์ฉ๋ ์์ ์ props๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์๋ค์ผ ๊ฒ์
๋๋ค.
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));์์์๋ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ผ๋ฐ์ ์ธ ํจ์์์๋ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
// Correct
this.setState(function(state, props) {
return {
counter: state.counter + props.increment
};
});State ์ ๋ฐ์ดํธ๋ ๋ณํฉ๋ฉ๋๋ค
setState()๋ฅผ ํธ์ถํ ๋ React๋ ์ ๊ณตํ ๊ฐ์ฒด๋ฅผ ํ์ฌ state๋ก ๋ณํฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, state๋ ๋ค์ํ ๋ ๋ฆฝ์ ์ธ ๋ณ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
constructor(props) {
super(props);
this.state = {
posts: [], comments: [] };
}๋ณ๋์ setState() ํธ์ถ๋ก ์ด๋ฌํ ๋ณ์๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
componentDidMount() {
fetchPosts().then(response => {
this.setState({
posts: response.posts });
});
fetchComments().then(response => {
this.setState({
comments: response.comments });
});
}๋ณํฉ์ ์๊ฒ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ this.setState({comments})๋ this.state.posts์ ์ํฅ์ ์ฃผ์ง ์์ง๋ง this.state.comments๋ ์์ ํ ๋์ฒด๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ ์๋๋ก ํ๋ฆ ๋๋ค
๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ ๋ชจ๋ ํน์ ์ปดํฌ๋ํธ๊ฐ ์ ์ํ์ธ์ง ๋๋ ๋ฌด์ํ์ธ์ง ์ ์ ์๊ณ , ๊ทธ๋ค์ด ํจ์๋ ํด๋์ค๋ก ์ ์๋์๋์ง์ ๋ํด์ ๊ด์ฌ์ ๊ฐ์ง ํ์๊ฐ ์์ต๋๋ค.
์ด ๋๋ฌธ์ state๋ ์ข ์ข ๋ก์ปฌ ๋๋ ์บก์ํ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. state๊ฐ ์์ ํ๊ณ ์ค์ ํ ์ปดํฌ๋ํธ ์ด์ธ์๋ ์ด๋ ํ ์ปดํฌ๋ํธ์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ๋ ์์ ์ state๋ฅผ ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
<FormattedDate date={this.state.date} />FormattedDate ์ปดํฌ๋ํธ๋ date๋ฅผ ์์ ์ props๋ก ๋ฐ์ ๊ฒ์ด๊ณ ์ด๊ฒ์ด Clock์ state๋ก๋ถํฐ ์๋์ง, Clock์ props์์ ์๋์ง, ์๋์ผ๋ก ์
๋ ฅํ ๊ฒ์ธ์ง ์์ง ๋ชปํฉ๋๋ค.
function FormattedDate(props) {
return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}์ผ๋ฐ์ ์ผ๋ก ์ด๋ฅผ โํํฅ์(top-down)โ ๋๋ โ๋จ๋ฐฉํฅ์โ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ชจ๋ state๋ ํญ์ ํน์ ํ ์ปดํฌ๋ํธ๊ฐ ์์ ํ๊ณ ์์ผ๋ฉฐ ๊ทธ state๋ก๋ถํฐ ํ์๋ UI ๋๋ ๋ฐ์ดํฐ๋ ์ค์ง ํธ๋ฆฌ๊ตฌ์กฐ์์ ์์ ์ โ์๋โ์ ์๋ ์ปดํฌ๋ํธ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
ํธ๋ฆฌ๊ตฌ์กฐ๊ฐ props๋ค์ ํญํฌ๋ผ๊ณ ์์ํ๋ฉด ๊ฐ ์ปดํฌ๋ํธ์ state๋ ์์์ ์ ์์ ๋ง๋์ง๋ง ๋์์ ์๋๋ก ํ๋ฅด๋ ๋ถ๊ฐ์ ์ธ ์์(water source)์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์์ ํ ๋
๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด App ๋ ๋๋งํ๋ ์ธ ๊ฐ์ <Clock>์ ๋ง๋ค์์ต๋๋ค.
function App() {
return (
<div>
<Clock /> <Clock /> <Clock /> </div>
);
}๊ฐ Clock์ ์์ ๋ง์ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ ๋
๋ฆฝ์ ์ผ๋ก ์
๋ฐ์ดํธ๋ฅผ ํฉ๋๋ค.
React ์ฑ์์ ์ปดํฌ๋ํธ๊ฐ ์ ์ํ ๋๋ ๋ฌด์ํ์ ๋ํ ๊ฒ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ ์ํ ์ปดํฌ๋ํธ ์์์ ๋ฌด์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ ๋ฐ๋ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.