๋ฆฌ์กํธ์์ props์ state๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฐ๋ ์ด๋ค.
๊ณต์๋ฌธ์
propsย (โpropertiesโ์ ์ค์๋ง) ์ย stateย ๋ ์ผ๋ฐ JavaScript ๊ฐ์ฒด์ ๋๋ค.
๋ ๊ฐ์ฒด ๋ชจ๋ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ ์ํฅ์ ์ฃผ๋ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋๋ฐ, ํ ๊ฐ์ง ์ค์ํ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.ย
props๋ (ํจ์ ๋งค๊ฐ๋ณ์์ฒ๋ผ) ์ปดํฌ๋ํธ์ย ์ ๋ฌ๋๋ ๋ฐ๋ฉดย state๋ (ํจ์ ๋ด์ ์ ์ธ๋ ๋ณ์์ฒ๋ผ) ์ปดํฌ๋ํธย ์์์ย ๊ด๋ฆฌ๋ฉ๋๋ค.
Props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ์ด๋ค.
๋ชจ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ์์ ์ props๋ฅผ ๋ค๋ฃฐ ๋ ๋ฐ๋์ ์์ํจ์์ฒ๋ผ ๋์ํด์ผ ํ๋ค.
์์ ํจ์๋ ์ ๋ฌ๋ ์ธ์๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ณ ์ธ์ ๊ทธ๋๋ก๋ฅผ ๊ฐ์ง๊ณ ํ์ฉ๋๋ ๊ฒ์ด๋ค.
function sum(a, b) {
return a + b;
}
์์ ํจ์๋ ์ ๋ ฅ๊ฐ์ ๋ฐ๊พธ๋ คํ์ง ์๊ณ ๋์ผํ ์ ๋ ฅ๊ฐ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
function withdraw(account, amount) {
account.total -= amount;
}
๋ฐ๋ฉด ์์ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ ๋ ฅ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ค.
์ฆ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ ์์ ์ปดํฌ๋ํธ์์ ํ์ธํ ์ ์์ง๋ง ๋ณ๊ฒฝํ ์๋ ์๋ค.
์ปดํฌ๋ํธ์ ์์ฑ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํด ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธธ ์ ์๋ค.
// Wrong
this.state.comment = 'Hello';
// Correct
this.setState({comment: 'Hello'});
this.state
๋ฅผ ์ง์ ํ๋ ๊ณณ์ ์ค์ง constructor
์ด๋ค.
this.props
์ย this.state
๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ state๋ฅผ ๊ณ์ฐํ ๋ ํด๋น ๊ฐ์ ์์กดํด์๋ ์๋๋ค.
state ๊ฐ ์์ฒด๋ฅผ ์์กดํ๊ฒ ๋๋ฉด ๋น๋๊ธฐ์ ์ธ ํธ์ถ์์ ๊ฐ์ ์ ๋๋ก ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค.
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
ํจ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ setState()
๋ก ์ฒซ๋ฒ์งธ ์ธ์๋ ์ด์ state๋ฅผ, ๋๋ฒ์งธ ์ธ์๋ ์
๋ฐ์ดํธ๊ฐ ์ ์ฉ๋ ์์ ์ props๋ก ๋ฐ์ ์์ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด, state์ ๋ค์ํ ๋
๋ฆฝ์ ์ธ ๋ณ์๊ฐ ์๋ค๋ฉด setState()
ํธ์ถ๋ก ๋ณ์๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ ์ ์๋ค.
constructor(props) {
super(props);
this.state = {
posts: [],
comments: []
};
}
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๋ก ์ ๋ฌํ ์ ์๋ค.
๋ชจ๋ state๋ ์์ ์ ์์ ํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์์ ์ ์์ ์ปดํฌ๋ํธ์๊ฒ๋ง ์ํฅ์ ๋ผ์น ์ ์๋ค.
์ด๊ฒ์ "ํํฅ์(top-down)" ๋๋ "๋จ๋ฐฉํฅ์" ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๊ณ ํ๋ค.