[React] ์ด๋ฒคํŠธ state props ๊ทธ๋ฆฌ๊ณ  render ํ•จ์ˆ˜ ๊ฐ•์˜

2021. 10. 2. 08:00ใ†Front-End ์ž‘์—…์‹ค/Vue.js

728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ 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'์œผ๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

728x90
๋ฐ˜์‘ํ˜•

'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