์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด๋ดค๋๋ฐ, ์ฐ๋ฆฌ์ ํ๊ทธ์ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค์ด์ ๊ทธ ํ๊ทธ, ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ์ด๋ฒคํธ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋๋ก ํด๋ณธ ์ ์ ์๋ค.
์ด๋ฒคํธ์ ์์ฐ์๊ฐ ๋์ด๋ณผ ์ฐจ๋ก!
<header>๋ผ๋ ์ฝ๋๋ ์๋ subject.js ์์ ์๋ ์ฝ๋์ด๋ค.
์ง๊ธ์ subject.js ํ์ผ์ ์ฃผ์์ฒ๋ฆฌํ๊ณ ๋ด์ฉ์ ๋ฐ๊นฅ์ชฝ์ผ๋ก ์ฎ๊ฒจ๋์ ์ํ์ด๋ค.
์ด์ ์ด ์ฝ๋๋ฅผ ๋นํ์ฑํํ๊ณ subject ์ปดํฌ๋ํธ ์ฃผ์์ ํ์๋ค.
subject๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋, ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋์ ์ด๋ฒคํธ๋ฅผ ์ค์นํ๊ณ ์ถ์ ๋
onChangePage๋ผ๊ณ ํ๋ ์ด๋ฒคํธ๋ฅผ ์ฐ์ธ์, ํ๊ณ ๊ฑฐ๊ธฐ์ ํจ์๋ฅผ ์ค์นํด๋๋๋ค.
์ฌ์ฉ์ค๋ช ์์๋aํ๊ทธ ํด๋ฆญ๋์์ ๋ ์ค์นํ ํจ์๋ฅผ ์คํํด๋๋ฆด๊ฒ์ ๋ผ๊ณ ์ ์ด๋๋๋ค.
์ ๋ฆฌ) ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ค๋ subject ์ปดํฌ๋ํธ๋ onchangepage๋ผ๋ ์ด๋ฒคํธ๊ฐ ์์ด์ ์ด ์ปดํฌ๋ํธ ์์์ ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋ ์ด ์ด๋ฒคํธ์ ์ค์นํ ํจ์๋ฅผ ํธ์ถํ๋๋ก ๋ง๋ค๋ ค๊ณ ํ๋ ๊ฒ์ด๋ค
onChagePage๋ผ๋ ํจ์๋ ์ด๋ค ํํ๋ก subject์ ์ ๋ฌ์ด ๋ ๊น??
=> props
subject.js์์๋ props๋ก ๋ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
์ด๋ฒ์๋ ๋ชฉ๋ก์์ ํด๋ฆญํ ๊ฒ์ ๋ฐ๋ผ ๋ณธ๋ฌธ ๋ด์ฉ์ ๋ฐ๊พธ๋ ์์ ์ ํด๋ณผ ๊ฒ์ด๋ค.
TOC ์ปดํฌ๋ํธ์๋ onChangePage๋ผ๋ ์ด๋ฆ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ค์นํ๋ค. ๊ทธ๋ฆฌ๊ณ TOC.js ์์์ onChangePage๋ผ๋ props๋ฅผ ๋ฐ์์ฃผ์ด์ผ ํ๋ค.
์คํ๋๋ ํจ์ ์์์๋ ๋๊ฐ์ด ํด๋ฆญํ์ ๋ ํ์ด์ง๊ฐ ๋ฐ๋์ง ์๋๋ก ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ๊ฐ์ฒด์ preventDefault ํจ์๋ฅผ ๋ฃ์๋ค. ๋๋จธ์ง๋ ๋๊ฐ์ด props๋ก ๋ฐ์์ ํจ์ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ๋ค.
์ง๊ธ ์ง๋์ ์ฝ๋๋ ๋ชจ๋ ๋ชฉ๋ก์ด ๋๋ ์ ๋ hi ์๋ฆผ์ฐฝ์ด ๋จ๊ฒ ๋๋ค.
์ฌ๊ธฐ์๋ App ์ปดํฌ๋ํธ์ state๊ฐ์ read๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ด ๋ค์ด๊ฐ๋ค.
์ด๋ ๊ฒ setState๋ฅผ ์ถ๊ฐํ๊ณ ์น ํ์ด์ง์์ ๋ชฉ๋ก์ ๋๋ฅด๋ฉด mode๊ฐ ๋ฐ๋๋ ๊ฒ์ ๊ฐ๋ฐ์ ์ฝ์์์ ํ์ธํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก WEB์ ๋๋ฅด๋ฉด ๋ค์ welcome ๋ชจ๋๋ก ๋ฐ๋๋ค.
์ด์ ๋ชฉ๋ก์์ ์ ํํ content๊ฐ ๋ณธ๋ฌธ์ ๋์ค๋๋ก ํด๋ณผ ๊ฒ์ด๋ค
App์ปดํฌ๋ํธ์ state์ selectedContentId ์ ๊ฐ์ ์ด๋ฆ์ ์ค์ ํ์ฌ ์ ํ๋ content๋ฅผ ๊ตฌ๋ถํ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก 2๋ฅผ ์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ App์์ render()๋ฅผ ์คํํ ๋ while๋ฌธ์ผ๋ก ์๋ฅผ ํ๋์ฉ ๋๋ ค๊ฐ๋ณด๋ฉด์ ํด๋น id์ ๋ด์ฉ์ ๋ณธ๋ฌธ์ ๋์์ค๋ค. ๊ธฐ๋ณธ๊ฐ ์ค์ ์ผ๋ก๋ง ๋ณธ๋ฌธ ๋ด์ฉ์ด ๋ฐ๋๊ธฐ ๋๋ฌธ์ ํด๋ฆญํ์ ๋ ๋ฐ๋๋๋ก ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
์ค๊ฐ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ฉด onChagePage๋ฅผ ์คํ์ํค๋ ๋ถ๋ถ์ TOC.js์์ onClick ํ์ ๋ props๋ฅผ ์คํํ๋ ๋ถ๋ถ์ด๋ค.
TOC๊ฐ App.js์ ํจ์๋ฅผ ์คํ์ํค๋ ๊ฒ!
์ฌ๊ธฐ์ ์ธ์๋ก ์ฐ๋ฆฌ๊ฐ ํด๋ฆญํ ํญ๋ชฉ์ id ๊ฐ์ ์ฃผ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณผ ์ ์๋ค.
onClick ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ e๋ผ๊ณ ํ๋ ์ด๋ฒคํธ ๊ฐ์ฒด์๋ ์ด๋ค ์ ๋ณด๊ฐ ๋ค์ด์์๊น?
TOC render() ํจ์์์ debugger๋ฅผ ์ฐ๊ณ onclick ๊ฐ ๋ฐ์ํ์ ๋์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฐ์ ์ฝ์์์ ํ์ธํด๋ณด์๋ค.
์ฝ๋๊ฐ ๋์ค๋ฉด esc๋ฅผ ๋๋ฌ ๊ฐ๋ฐ์ ์ฝ์์ ์ผ ๋ค. ์ฝ์์์ e๋ฅผ ๋๋ฅด๋ฉด ์ด๋ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋์ง ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์์ฑ์ target ์ธ๋ฐ ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ๊ทธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ด๋ฒคํธ ํจ์ ๋ด์์ e.target์ด๋ผ๊ณ ํ๋ฉด ์ด๋ฒคํธ๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๊ทธ์ธ a ํ๊ทธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
aํ๊ทธ๋ฅผ ์์๋ด๋ฉด ์ฌ๊ธฐ์ ๋ data-id ๊ฐ์ ์์๋ผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ data- ๋ผ๋ ์ ๋์ฌ ์์ํ๋ ์์ฑ์ target ์์ฑ ์์ dataset ์์ ์ ๊ทผํ ์ ์๋ค.
์ด๋ ๊ฒ ์์๋ธ ๊ฐ์ onChangePage๋ฅผ ํธ์ถํ ๋ ์ธ์๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
App.js์์ ๋ฐ์ ์ธ์๋ ๋ฌธ์๋ก ๋ฐ์์ง๋๋ฐ javascript์์ ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ฐ๊พธ๋ ํจ์๋ Number๋ฅผ ์ฌ์ฉํด์ค๋ค.
์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ id๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
bind์ data[i].id ์ ๋ณด๋ฅผ onClick ์ ์ฐ๊ฒฐ๋ ํจ์์ ์ฒซ๋ฒ์งธ ์ธ์๋ก ๋๊ฒจ์ค๋ค.
(์ธ์์ ์์๋ ํน์ฑ์ด๋ค)
'WEB > Front-End๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์ฑ๋ฅ๊ฐ์ ์ ์ข ๋ ํธํ๊ฒํ๊ธฐ (create) (0) | 2021.10.11 |
---|---|
[React] CRUD๋ฅผ ๊ณ๋ค์ธ,,, (Create) (0) | 2021.10.11 |
[React] event์์ state ๋ณ๊ฒฝ (feat. bind, setState) (0) | 2021.10.07 |
[React] event (0) | 2021.10.04 |
[React] state๋? (props์ ๋น๊ต) (0) | 2021.10.02 |