kohigowild
[React] props์ state ๋ณธ๋ฌธ
๐ฝ props์ state
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๋ ๋ ๊ฐ๋ก ๋๋๋ค. ๋ฐ๋ก props์ state์ธ๋ฐ, props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ์ฃผ๋ ๊ฐ์ด๋ค. ์์ ์ปดํฌ๋ํธ์์๋ props๋ฅผ ๋ฐ์์ค๊ธฐ๋ง ํ๊ณ , ๋ฐ์์จ props๋ฅผ ์ง์ ์์ ํ ์๋ ์๋ค. ๋ฐ๋ฉด์ state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ ์ธํ๋ฉฐ ๋ด๋ถ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ก props
props๋ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฅผ ๋ ํจ๊ป ์ง์ ํ๋ค. ์๋ ์ฝ๋์์๋ People ์ปดํฌ๋ํธ์ name prop๊ณผ age prop์ ์ง์ ํ์๋ค.
<People name="mitt" age={ 28 } />
<People name="rachel" age={ 27 } />
- ์์ ๊ฐ์ด ๊ฐ์ ํ์ ์ ์ปดํฌ๋ํธ์ ๋ค๋ฅธ props ๊ฐ์ ์ฃผ์ด ํจํด์ด ๋ฐ๋ณต๋๋ ํํ๋ก ์ปดํฌ๋ํธ์ ํจ์จ์ ์ธ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- props์๋ ๋ถ๋ฆฌ์ธ, ์ซ์, ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๊ณ , ๊ณต๋ฐฑ ๊ตฌ๋ถ์ผ๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ด๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. props์ ์๋ ๋ฐ์ดํฐ๋ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ๋ชจ๋ ์ค๊ดํธ๋ก ๊ฐ์ ๊ฐ์ธ์ผ ํ๋ค.
๐ก props ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
- props๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฏ๋ก ์ปดํฌ๋ํธ์ ๋ด๋ถ์์ props๋ฅผ ์์ ํ ์ ์๋ค.
- props๋ฅผ ๋ฐ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ์ธ์๋ฅผ ์ ์ํ๋ฉด, props๋ฅผ ์์ฑ์ผ๋ก ๊ฐ์ง๋ ๊ฐ์ฒด Object๊ฐ ํด๋น ์ธ์๋ก ์ ๋ฌ๋๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฌ์ฉ ์, ๊ฐ์ฒด์ ์กด์ฌํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๋ฏ ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ props๋ฅผ ๊บผ๋ด ์ธ ์ ์๊ณ , ์ด๋ฅผ ์ค๊ดํธ๋ก ๊ฐ์ธ๋ ํํ๋ก ์ฌ์ฉํ๋ค.
function People(props) {
return {
<div>{props.name}</div>
<div>{props.age}</div>
}
}
๐ก state
- state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. state๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์๋ ์ปดํฌ๋ํธ์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ ๊ฐ์ง๊ฐ ์๋ค.
- ํด๋์คํ ์ปดํฌ๋ํธ์์๋ ์ปดํฌ๋ํธ ์์ฒด๊ฐ state๋ฅผ ์ง๋๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.
- ํจ์ํ ์ปดํฌ๋ํธ์์๋ useState๋ผ๋ ํจ์, Hook์ ํตํด ์ฌ์ฉํ๋ค.
- ์ฌ๋ฌ ๊ฐ์ ์์์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ผ๊ฑฐ๋ ๋ ๊ฐ์ ์์ ์ปดํฌ๋ํธ๋ค์ด ์๋ก ํต์ ํ๊ฒ ํ๊ธฐ ์ํด์ ์กฐ์ ์ปดํฌ๋ํธ์ state๋ฅผ ์ ์ํ๋ค. ์กฐ์ ์ปดํฌ๋ํธ๊ฐ props๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ปดํฌ๋ํธ์ state๋ฅผ ๋ค์ ์ ๋ฌํจ์ผ๋ก์จ ์๋ก ๋๊ธฐํํ๋ค.
๐ก ํด๋์คํ ์ปดํฌ๋ํธ์์ state ์ฌ์ฉ
ํด๋์คํ ์ปดํฌ๋ํธ์์ state๋ฅผ ์ฌ์ฉํ ๋๋ ๊ฐ์ฒด ํ์์ this.state๋ฅผ ํตํด state ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๊ณ ์กฐํํ ์ ์๋ค. state ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ this.setState๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ ์ค๋ค.
class ClassExample extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0,
};
}
render() {
const { count } = this.state;
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => {
this.setState({
count: count + 1
});
}}>
Click me
</button>
</div>
);
}
}
}
๐ก ํจ์ํ ์ปดํฌ๋ํธ์์ state ์ฌ์ฉ
useState()
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ๋์ ์ธ ๊ฐ์ ์ํ(state)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฌ์ฉ์ ์ธํฐ๋์ ์ ํตํด ์ปดํฌ๋ํธ์ ์ํ๊ฐ์ด ๋์ ์ผ๋ก ๋ฐ๋ ๊ฒฝ์ฐ์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํ์ํ๋ค.
- Hooks ๊ธฐ๋ฅ์ด ๋์ ๋ ๋ฆฌ์กํธ 16.8 ๋ฒ์ ๋ถํฐ useState() ํจ์๋ฅผ ํตํด ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
- https://trustmitt.tistory.com/41
๐ฝ props์ state EX
๐ก props
<div id="name" class="label" onclick="alert('Hello World!');">
Hello world!
</div>
์์ ์ฝ๋๋ HTML์ div ํ๊ทธ์ id์ class ์์ฑ์ ์ค์ ํ๊ณ onclick ์์ฑ์ ์ง์ ์๋ฐ์คํฌ๋ฆฝํธ์ alert๋ฅผ ์ฌ์ฉํ๋ค.
const Text = ({text}) => {
return <div>{text}</div>
}
const App = () => {
return <Text text='Hello world!'/>
}
์์ ๊ฐ์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ(App)์์ ์์ ์ปดํฌ๋ํธ(Text)์ ์์ฑ(Props)์ ์ด์ฉํ์ฌ Hello world! ๋ผ๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ก state
import React, { useState } from 'react';
const Text = ({text}) => {
return <div>{text}</div>
}
const App = () => {
const [count, setCount] = useState(0);
return <div>
<Text text={count} />
<div onClick={() => setCount(count + 1)}>+</div>
</div>
}
๐ฝ Reference
https://reactjs.org/docs/components-and-props.html
https://reactjs.org/docs/state-and-lifecycle.html
https://velog.io/@soyi47/React-Component-props-state
https://studyingych.tistory.com/52
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ์กํธ ์ด๋ฏธ์ง ์ต์ ํ ๋ฐ ์ฑ๋ฅ ๊ฐ์ (0) | 2023.03.26 |
---|---|
Ref์ ํ์ฉ๊ณผ useRef (0) | 2023.01.02 |
REACT ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ (Life Cycle) (0) | 2022.12.10 |
React :: COIN TRACKER (0) | 2022.11.29 |
React๋ก ๊ฐ๋จํ To-Do-List ๊ตฌํ (0) | 2022.11.24 |