2021. 10. 2. 08:00ใFront-End ์์ ์ค/Vue.js
์๋ ํ์ธ์? ์ฃผ๋ํ๋์ ๋๋ค.
์ค๋์ React์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ์ ์ ์จ Event ์ฒ๋ฆฌ์ ๋ํด ๊ณต๋ถํด๋ณด๊ณ , props, render์ ๋ํด ๋ค์ ํ๋ฒ ์ฌ์ ๋ฆฝํ๊ณ ๊ฐ๋๋ก ํ ๊ฒ์!
ํจ๊ป ๊ณต๋ถ ํด ๋ณด์ค๊ฒ์!
๐ ์ด๋ฒคํธ state props ๊ทธ๋ฆฌ๊ณ render ํจ์ ๊ฐ์
๋ฆฌ์ํธ์์๋ state ๊ฐ์ด ๋ฐ๋๋ฉด ๊ทธ state๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ปดํฌ๋ํธ์ render ํจ์๊ฐ ๋ค์ ํธ์ถ๋๊ณ , ๊ทธ ๋ฐ์ ์๋ ์ปดํฌ๋ํธ๋ค๋ ๊ฐ์ render ํจ์๊ฐ ์๋๋ฐ, ๋ชจ๋ ๋ค ํธ์ถ๋๋ค. ๊ทธ๋์ ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ง๊ฒ ๋๋ค.
renderํจ์๊ฐ ํ๋ ์ผ์ ์ด๋ค HTML์ ๊ทธ๋ฆด๊ฒ์ธ๊ฐ?์ ๋ํ ๊ฒฐ์ ์ ํ๋ ๊ฒ์ด์์.
๋ฆฌ์ํธ์์๋ props, state ๊ฐ์ด ๋ฐ๋๋ฉด ์ปดํฌ๋ํธ์ render ํจ์๊ฐ ํธ์ถ ๋๋๋ก ์ค๊ณ ๋์ด ์๋ ๊ฒ์ด์์.
<header>
<h1><a href ="/" onClick={function (){ {/*onClick์ ํตํด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต๋ช
์ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ค.*/}
alert('hi');
}}> {this.state.subject.title}</a></h1>
{this.state.subject.sub}
</header>
์ด ์ฝ๋๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์์ Web(a Tag)์ ํด๋ฆญํ๋ฉด hi๋ผ๋ ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋๋ฐ, ์ด๊ฑธ OK๋ฅผ ๋๋ฅด๋ฉด Reload๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์์.
<h1><a href ="/" onClick={function (e){ {/*onClick์ ํตํด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต๋ช
์ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ค.*/}
console.log(e);
// debugger; // ์น ๋ธ๋ผ์ฐ์ ธ์ ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ์ผ ๋์ผ๋ฉด ์ด ์ฝ๋๋ฅผ ๋ง๋ฌ์ ๋, ์คํ์ ๋ฉ์ถ๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ Souces Tab์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ฒ ํด ์ค๋ค.
e.preventDefault(); // HTML Tag์ Event์ ๋ํ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์์ ๋ง๋๋ค.
}}>
์์ ์ฝ๋์์ ๋ค์๊ณผ ๊ฐ์ด
this.state.mode = 'welcome'
์ ์ถ๊ฐํ๊ณ , 'WEB'์ ํด๋ฆญํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด Error๊ฐ ๋๋ ๊ฒ์ด์์.
๊ทธ ์ด์ ๋ ๋๊ฐ์ง ๋ฌธ์ ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ด์์.
์ฒซ๋ฒ์งธ : Event๊ฐ ์คํ ๋์์ ๋, ํธ์ถ๋๋ ํจ์ ์์์๋ this์ ๊ฐ์ด ์ปดํฌ๋ํธ ์๊ธฐ ์์ ์ ๊ฐ๋ฅดํค์ง ์๊ณ , ์๋ฌด๊ฒ๋ ์ค์ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ undefind State๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ๋ ์๋ฌด๊ฒ๋ ์๊ธฐ์ Error๊ฐ ๋๋ ๊ฒ์ด์์.
์ด๋ด ๋๋ ์๋ ์ฝ๋ ์ฒ๋ผ
<header>
<h1><a href ="/" onClick={function (e){ {/*onClick์ ํตํด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต๋ช
์ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ค.*/}
console.log(e);
// debugger; // ์น ๋ธ๋ผ์ฐ์ ธ์ ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ์ผ ๋์ผ๋ฉด ์ด ์ฝ๋๋ฅผ ๋ง๋ฌ์ ๋, ์คํ์ ๋ฉ์ถ๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ Souces Tab์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ฒ ํด ์ค๋ค.
e.preventDefault(); // HTML Tag์ Event์ ๋ํ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์์ ๋ง๋๋ค.
// this.state.mode = 'welcome';
}.bind(this)}>
{this.state.subject.title}</a></h1>
{this.state.subject.sub}
</header>
ํจ์๊ฐ ๋๋ ์ง ํ .bind(this)๋ฅผ ์ถ๊ฐ ํด ์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์.
๊ทธ๋ผ ํจ์ ์์์ this๋ ์ฐ๋ฆฌ์ ์ปดํฌ๋ํธ๊ฐ ๋๋ต๋๋ค.
์์ ๊ฐ์ด ์ฝ๋ฉํ๊ณ , 'WEB'์ ๋๋ฅด๋ฉด ์๋ฌด ํ์๋ ์ผ์ด๋์ง ์๋ ๊ฒ์ด์์. ์๋ํ๋ฉด State๊ฐ์ด ๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ด์์.
<header>
<h1><a href ="/" onClick={function (e){ {/*onClick์ ํตํด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต๋ช
์ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ค.*/}
console.log(e);
// debugger; // ์น ๋ธ๋ผ์ฐ์ ธ์ ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ์ผ ๋์ผ๋ฉด ์ด ์ฝ๋๋ฅผ ๋ง๋ฌ์ ๋, ์คํ์ ๋ฉ์ถ๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ Souces Tab์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ฒ ํด ์ค๋ค.
e.preventDefault(); // HTML Tag์ Event์ ๋ํ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์์ ๋ง๋๋ค.
this.state.mode = 'welcome';
this.setState({
mode : `welcome`
});
}.bind(this)}>
{this.state.subject.title}</a></h1>
{this.state.subject.sub}
</header>
์์ ๊ฐ์ด 'this.SetState({ mode : 'welcome' });' ์ ์ถ๊ฐํ๋ฉด
WEB์ ํด๋ฆญ ํ์ ๋
์ด๋ ๊ฒ ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ด์์.
render ํจ์ ์์์ this๋ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ ๊ฐ๋ฅดํค๋๋ฐ,
function (e){ {/*onClick์ ํตํด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ต๋ช
์ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ค.*/}
console.log(e);
// debugger; // ์น ๋ธ๋ผ์ฐ์ ธ์ ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ์ผ ๋์ผ๋ฉด ์ด ์ฝ๋๋ฅผ ๋ง๋ฌ์ ๋, ์คํ์ ๋ฉ์ถ๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ Souces Tab์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ฒ ํด ์ค๋ค.
e.preventDefault(); // HTML Tag์ Event์ ๋ํ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์์ ๋ง๋๋ค.
this.state.mode = 'welcome';
this.setState({
mode : `welcome`
});
}
์์ ๊ฐ์ ํจ์ ์์์ this๋ ์๋ฌด๊ฐ๋ ๊ฐ์ง๊ณ ์์ง ์๋ ๊ฒ์ด์์.
์์ ๊ฐ์ ๋, var bindTest2๋ bindTest.bind(obj)๋ก ์ธํด console.logd์ this๊ฐ์ด obj๋ก ๋ฐ๋๊ฒ ๋๋ฏ๋ก, bindTest()๊ฐ ํธ์ถ๋ ๋ console.log์ this๋ obj๊ฐ ๋๊ณ , ์ด๋ฆ์ 'JunyHarang'์ผ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ๋๋ ๊ฒ์ด์์.
'Front-End ์์ ์ค > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Reacte] Component Event ๋ง๋ค๊ธฐ (0) | 2021.10.02 |
---|---|
[Reacte] Event setState ํจ์ (0) | 2021.10.02 |
[React] State์ Props์ ์ฐจ์ด (0) | 2021.10.02 |
[React] State (0) | 2021.09.27 |
[React] Component File ๋ถ๋ฆฌ (0) | 2021.09.26 |