[React] event์์ state ๋ณ๊ฒฝ (feat. bind, setState)
state๋ฅผ ์ธํ ํด๋์ ์์ ๊ณผ event๋ฅผ ์ค์นํ ์์ ์ ์ฐ๊ฒฐ์ํฌ ๊ฒ์ด๋ค.
ํ๋ ค๊ณ ํ๋ ๊ฒ!
WEB์ด๋ผ๋ ๊ธ์จ๋ฅผ ๋๋ฅด๋ฉด App์ด๋ผ๋ ์ปดํฌ๋ํธ์ ๊ฐ์ mode๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค.
e.prevenDefault ์๋์ this.state.mode= 'welcome' ์ ์ฐ๋ฉด ์ค๋ฅ๊ฐ ๋๋๋ฐ ์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ์๋ฌ๋ฅผ ํฌํจํ๊ณ ์๋ค.
1. event๊ฐ ํธ์ถ๋์ ๋ ์คํ๋๋ ํจ์ ์์์๋ this์ ๊ฐ์ด ์ปดํฌ๋ํธ ์๊ธฐ ์์ ์ ๊ฐ๋ฅดํค๋ ๊ฒ์ด ์๋๋ผ, ์๋ฌด ๊ฐ๋ ์ ํ ๋์ด์์ง ์๋ค.
=> ํด๊ฒฐ๋ฐฉ๋ฒ: ํจ์๊ฐ ๋๋๋ ์งํ์ .bind(this) ๋ฅผ ์ถ๊ฐํด์ ํจ์ ์์์ this๋ ์ฐ๋ฆฌ์ ์ปดํฌ๋ํธ๊ฐ ๋ ์ ์๋๋ก ํ๋ค.
2. ํ์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๊ณ WEB์ ๋๋ฌ๋ welcome ๋ชจ๋๋ก ๋ฐ๋์ง ์๋๋ฐ
=> ์ด์ ๋ ๋ฆฌ์กํธ๋ state ๊ฐ์ด ๋ฐ๋์๋ค๋ ๊ฑธ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌ์กํธ์ ์ฌ์ฉ์ค๋ช ์์๋ ์ด๊ฒ์ setState ํจ์์ ์ธ์๋ก mode ๊ฐ์ ๋ฃ์ด mode ๊ฐ์ ๋ฐ๊พผ๋ค.
Bind ํจ์ ์์ธํ ์ดํดํ๊ธฐ
render ํจ์๊ฐ ํธ์ถ๋ ๋ ํจ์ ์์์ this๋ render ํจ์๊ฐ ์ํด์๋ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ
onClick์ ์ฐ๊ฒฐ๋ ํจ์ ๋ฑ์ this๊ฐ ์๋ฌด ๊ฐ๋ ์๋ค.
var obj = {name:'narang'};
function bindTest(){
console.log(this.name);
}
// bindTest ํจ์ ์์ this๋ obj๊ฐ ๋๋ ํจ์๊ฐ ์๋ก ์๊ธฐ๋ ๊ฒ ๊ฐ์(๋ณต์ ์ฒ๋ผ) ๋์์ ํ๋ค.
var bindTest2 = bindTest.bind(obj);
๊ทธ๋์ ์ฌ์ง์์ ์ฐ์ธ bind(this)๋ App์ด๋ผ๋ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ฅผ onClick๊ณผ ์ฐ๊ฒฐ๋ ํจ์ ์์ ๋ฃ์ด์ ์ด ํจ์ ์์์ this๋ ๊ทธ ๊ฐ์ฒด๋ App ์ปดํฌ๋ํธ๊ฐ ๋๋ ๊ฒ์ด๋ค.
State ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ํจ์์ ํํ๋ก ๋ณ๊ฒฝํ๋ ์ด์
์์ฑ์, App ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ construnctor ํจ์์์๋
์ด๋ฐ ์์ผ๋ก state๋ฅผ ์ค์ , ์์ ํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฏธ ์ปดํฌ๋ํธ๊ฐ ์์ฑ์ด ๋๋ ๋ค์์ ๋์ ์ผ๋ก state ๊ฐ์ ๋ฐ๊ฟ ๋๋ ์ผ์ชฝ๊ณผ ๊ฐ์ด ํ๋ฉด ์๋์๋ค.
์ค๋ฅธ์ชฝ์ฒ๋ผ ํด์ผํ๋ค. ์ผ์ชฝ์ ๋ฆฌ์กํธ ๋ชฐ๋ state๋ฅผ ๋ฐ๊ฟ๋ฒ๋ฆฐ ๊ฒ์ด๋ค. ๊ทธ๋์ rendering์ ํจ์ ์๋ค.
setState ํจ์์ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฐ์ ๊ฐ์ฒดํํ๋ก ์ฃผ๋ ๊ฒ์ ํตํด์ ์์ ํด์ผํ๋ค.
state ๋ชจ๋์ ๊ฐ์ ๋ฐ๋ ๊ฒ์ ๋ฆฌ์กํธ๊ฐ ์์๋ค๋ฉด ์์์๋ ์ด๋ป๊ฒ ๋์ํ๋?
render ํจ์๋ค์ด ํธ์ถ๋๋ค. ์๋ธ ์ปดํฌ๋ํธ๋ ๋ง์ฐฌ๊ฐ์ง!
ํ๋ฉด์ ๋ด์ฉ๋ ๋ฐ๋ ๊ฒ์ด๋ค.