-
๐ React ๊ณต๋ถํ๊ธฐ | component ๋ง๋ค๊ธฐ, props์ state ๊ฐ๋ ๋ฆฌ์กํธ 2020. 11. 25. 22:00
ํจ์ํ ์ปดํฌ๋ํธ vs ํด๋์ค ์ปดํฌ๋ํธ
์ปดํฌ๋ํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์์ฒ๋ผ ํ๋์ ๊ธฐ๋ฅ์ ํ๋ ๋จ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ํ๋์ ์ปดํฌ๋ํธ๋ ํ๋์ ์ปค์คํ ํ๊ทธ์ ์ญํ ์ ํ๋ค.
์ปดํฌ๋ํธ๋ ํจ์ํ์ผ๋ก, ํด๋์คํ์ผ๋ก ์์ฑํ ์ ์๋ค.
ํจ์ํ ์ปดํฌ๋ํธ
ํจ์ ์ปดํฌ๋ํธ๋ก <App /> ํ๊ทธ๋ฅผ ๋ง๋ค์๋ค. ์ด ์ปดํฌ๋ํธ๋ index.js์์ ์ฌ์ฉํ๊ณ ์๊ณ , <App name="wow" />๋ก name์ด๋ผ๋ props๋ฅผ ๋๊ฒจ์ฃผ๊ณ ์๋ค.
props๋ฅผ ๋ฐ๊ธฐ ์ํด์๋ App์์ props๋ฅผ ์ธ์๋ก ๋ฐ์์ผํ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ
ES6 class๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ์๋ ์๋ค.
์ด๋ป๊ฒ Hello, wow๊ฐ ํ๋ฉด์ ๋ ๋๋ง ๋๊ฒ ๋๋ ๊ฒ์ผ๊น?
1. <App name = "wow" /> ์๋ฆฌ๋จผํธ๋ก ReactDOM.render()๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
2. React๋ {name : "wow"} ๋ฅผ props๋ก ํ์ฌ App ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ๋ค.
3. App ์ปดํฌ๋ํธ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก <h1> Hello, wow <h1> ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
4. React DOM์ <h1> Hello, wow <h1> ์๋ฆฌ๋จผํธ์ ์ผ์นํ๋๋ก DOM์ ์ ๋ฐ์ดํธํ๋ค. (Virtual DOM)
์ฃผ์ํ ์ ์ ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค. <app> (x) -> <App> (o)ํจ์ ์ปดํฌ๋ํธ์ ํด๋์ค ์ปดํฌ๋ํธ์ ์ฐจ์ด์
1. ํจ์ ์ปดํฌ๋ํธ์์๋ hook์ ์ฌ์ฉํ์ง ์๋ํ state๋ฅผ ๊ฐ์ง ์ ์๋ค.
2. ํด๋์ค ์ปดํฌ๋ํธ์์๋ renderํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
Props
props๋ ์์ฑ์ ๋ํ๋ด๋ ๋ฐ์ดํฐ์ด๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์์ํ ์ ์์
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์๋ง props์์ ์ด ๊ฐ๋ฅํ๋ค.
์์ ์ฝ๋๋ก ์๋ฅผ ๋ค๋ฉด, name="wow" ๋ผ๋ ์์ฑ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ index.js์์ ์์ ์ปดํฌ๋ํธ์ธ <App /> ์ผ๋ก ์์๋๋ ์์ฑ์ด๋ค. ์ด props๋ ์ค์ง index.js์์๋ง ์์ ์ด ๊ฐ๋ฅํ๊ณ , <App />์์๋ ์์ ์ด ๋ถ๊ฐํ๋ค.
์ฆ, Props๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค
State
state๋ ๋ณํ ์ ์๋ ๊ฐ์ด๋ค.
ํ์ฌ ๋ด๊ฐ 20์ด์ด๋ผ๋ฉด this.state = {age : 20} ์ด๋ผ๊ณ ํํํ ์ ์๊ณ , ์ด ๊ฐ์ ํด๊ฐ ์ง๋๋ฉด ๋ณํ๋ ๊ฐ์ด๋ค.
๊ฐ๋จํ๊ฒ button์ ๋๋ฌ์ +, -๋ฅผ ํ ์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด๋ณด์๋ค. ์ฌ๊ธฐ์ constructor๋ฅผ ๋ณด๋ฉด this.state = {value : 0} ์ด ๋ค์ด๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
state๋ props์ ๋ค๋ฅด๊ฒ constructor์์ ์บก์ํ ๊ทธ๋ฆฌ๊ณ ์๋ํ๋์ด์๋ค. ๋, ์ปดํฌ๋ํธ์ ์ํด ์์ ํ ์ ์ด๋๋ค.(๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅ)
state์ props์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ state๋ ๋์ด์ ๊ฐ์ด ๋ด๋ถ์ ์ผ๋ก ๋ณํ ์ ์๋ ๊ฐ์ด๊ณ , props๋ ์ด๋ฆ์ฒ๋ผ ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์ ๋ณํ ์ ์๋ ๊ฐ์ด๋ค(์ผ๋ฐ์ ์ผ๋ก).setState() ์ฌ์ฉ ์ด์ (React Immutable)
state๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ๋ฐ๋์ this.setState๋ฅผ ์ฌ์ฉํด์ state๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค.
this.setState๋ก state๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ฉด ์๋ฌด๋ฆฌ state๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋ render()๋ฅผ ์ฌํธ์ถํ์ง ์๋๋ค. ๊ทธ๋์ state๋ฅผ ๋ฐ๊พธ๋๋ผ๋ ๋ฆฌ์กํธ๋ state๊ฐ ๋ณ๊ฒฝ๋์ง ์์ง ๋ชปํ๋ค.setState๋ฅผ ํธ์ถํ๋ฉด ๋ฆฌ์กํธ๋ ์๋์ผ๋ก state๋ฅผ ์ ๋ฐ์ดํธํ๋ค(์์ ์ปดํฌ๋ํธ์ ์๋ state๋ค๋).
'๋ฆฌ์กํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ