WEB/Front-End๐ŸŒ

[React] event์—์„œ state ๋ณ€๊ฒฝ (feat. bind, setState)

narang111 2021. 10. 7. 19:47

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 ํ•จ์ˆ˜๋“ค์ด ํ˜ธ์ถœ๋œ๋‹ค. ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!

ํ™”๋ฉด์˜ ๋‚ด์šฉ๋„ ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค.