๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WEB32

[React] ํ›…(Hooks) ๐Ÿ“–๋ฆฌ๋‹ค๊ธฐ, ๊ณต์‹๋ฌธ์„œ, ๋…ธ๋งˆ๋“œ ์ฝ”๋”, ์ œ๋กœ์ดˆ๋‹˜์˜ ์˜์ƒ์„ ๋ณด๊ณ  ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.๐Ÿ“– ๋ฆฌ๋‹ค๊ธฐ์—์„œ 8์žฅ์— ํ›…์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜จ๋‹ค. ์˜ˆ์ œ๋ฅผ ๋”ฐ๋ผํ•˜๋ฉด์„œ ํ•ด๋ณด์•˜์ง€๋งŒ 8์žฅ๊นŒ์ง€ ํœ˜๋šœ๋ฃจ๋งˆ๋šœ๋ฃจ ๋‹ฌ๋ ค์„œ ๊ทธ๋Ÿฐ๊ฐ€ ๋‡Œ์— ๊ณผ๋ถ€ํ™”๊ฐ€ ์™€์„œ ๋จธ๋ฆฌ๊ฐ€ ๋ฐ›์•„๋“ค์ด๊ธฐ๋ฅผ ๊ฑฐ๋ถ€๋ฅผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ํ•˜์ง€๋งŒ, 8์žฅ๊นŒ์ง€ ํ–ˆ์„๋•Œ ์ด ๋ถ€๋ถ„์ด ๋น„์ค‘์ด ์žˆ๊ณ  ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋Š๊ปด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋ฃจ ์‰ฌ๊ณ  ํ•˜๋ฃจ ๋‹ค์‹œ ๋‚  ์žก์•„์„œ ๊ณต์‹๋ฌธ์„œ์™€ ์ฑ…, ์˜์ƒ์„ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์–ด๋Š ์ •๋„? ์กฐ๊ธˆ์€? ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.๐Ÿ˜ฅ ์šฐ์„  ์ œ์ผ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ๊ฐœ๋…์„ ์–ด๋Š ์ •๋„ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ๋‹ค์‹œ ํ•ด๋ณด๋Š”๊ฒƒ!์ด ์ดํ•ด๋ฅผ ํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋„์›€์ด ๋๋‹ค. ๋˜, ๋…ธ๋งˆ๋“œ ์ฝ”๋”๋‹˜์˜ ์˜์ƒ๊ณผ ์ œ๋กœ์ดˆ๋‹˜์˜ ํ›…์— ๋Œ€ํ•œ ์˜์ƒ์ด ๋„์›€์ด ๋งŽ์ด ๋๋‹ค. ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ state.. 2021. 1. 6.
Input ํƒœ๊ทธ, ์†์„ฑ ์˜ค๋Š˜์€ ๊ทธ๋™์•ˆ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋ฌด์ž‘์ • ๋”ฐ๋ผํ•˜๊ธฐ๋งŒ ๋ฐ”๋นด์—ˆ๋Š”๋ฐ, ์ญ‰ ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด์˜ค๋ฉด์„œ ๋น ์ง€์ง€์•Š๋Š” ํƒœ๊ทธ๋“ค์ด ์žˆ์—ˆ๋‹ค. inputํƒœ๊ทธ๊ฐ€ ์ฐธ ๋งŽ์ด ์“ฐ์˜€๋Š”๋ฐ ๊ณ„์† ์“ฐ๋ฉด์„œ ๊ณต๋ถ€๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์ œ๋Œ€๋กœ ์“ฐ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ข€ ์ฐพ์•„๋ดค๋‹ค. this.input = ref} type='password' value={this.state.password} onChange={this.handleChange} className={this.state.clicked ? (this.state.validated ? 'success' : 'failure') : ''} onKeyPress={this.onKeyPress} /> ์ด๋ ‡๊ฒŒ input ํƒœ๊ทธ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ํƒœ๊ทธ ์•ˆ์— ์ž‘์„ฑ๋˜๋Š” ์†์„ฑ๋“ค์„ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ์•Œ๊ณ , ์ž˜ ํ™œ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์— ์ฐพ.. 2021. 1. 3.
[React] ์Šคํฌ๋กค๋ฐ•์Šค ์ฝ”๋“œ์— ์œ„์•„๋ž˜ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๐Ÿ“–๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ๐Ÿ“– ์ฑ…์— ์žˆ๋Š” ref์˜ˆ์ œ์ธ ์Šคํฌ๋กค ๋ฐ•์Šค ์กฐ์ž‘ ์ฝ”๋“œ๋Š” '๋งจ๋ฐ‘์œผ๋กœ'๋ผ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ž๋™์œผ๋กœ ์Šคํฌ๋กค์„ ๋งจ ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ํ•ด์ฃผ๋Š” ๋‚ด์šฉ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์‘์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์Šคํฌ๋กค ๋ฐ•์Šค๊ฐ€ ์œ„, ์•„๋ž˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃฌ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•„ ์ฒ˜์Œ์—๋Š” ์ด๋ฏธ ์ž‘์„ฑ๋˜์–ด์ ธ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์–ด๋””์„œ๋ถ€ํ„ฐ ์† ๋Œ€์•ผ ๋ ์ง€ ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ, ์•ž์—์„œ ํ–ˆ๋˜ ์˜ˆ์ œ๋“ค์„ ์ด์šฉํ•ด์„œ ๊ณง์žฅ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ผ๋‹จ ์Šคํฌ๋กค์ด ๋‚ด๋ ค๊ฐ€์žˆ์„๋•Œ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์˜ฌ๋ผ์™€์•ผํ•˜๊ณ , ์˜ฌ๋ผ๊ฐ€์žˆ์„ ๋•Œ๋Š” ๋‚ด๋ ค์™€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•œ ์ดˆ๊ธฐ๊ฐ’๋“ค์„ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค. ์ด์— ๋”ฐ๋ผ ์•ž ์žฅ์—์„œ์˜ ์˜ˆ์ œ๋“ค์„ ๋– ์˜ฌ๋ ค์„œ state์— ๋Œ€ํ•œ ์ดˆ๊ธฐ๊ฐ’์„ App.js์— ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. s.. 2021. 1. 2.
[React] ref ์˜ค๋Š˜์€ ref์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค. ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  ์ฑ…์„ ๋ณด๋ฉด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๊ฐ€ ref์— ๋Œ€ํ•ด์„œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ด์„œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ko.reactjs.org/docs/refs-and-the-dom.html ref(Reference) ref๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ผ๋Š” ๋œป์ธ๋ฐ, ์ด๋ฅผ ๋ฒˆ์—ญํ•˜๋ฉด ์ฐธ์กฐ๋ผ๋Š” ๋ง์ด๋‹ค. ๊ณผ์—ฐ ์ฝ”๋”ฉ์—์„œ ์ฐธ์กฐ๋ผ๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ์„ ๋œปํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ์›๋ž˜ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ๋•Œ, ์ฐธ์กฐ๋Š” ๋ณต์ œ์™€ ๋น„๊ต๊ฐ€ ๋˜์—ˆ์—ˆ๋‹ค. ๋ณต์ œ๋Š” ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ์ฐธ์กฐ๋Š” ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ๋น„์œ ๋˜์—ˆ๋‹ค. ์ฐธ์กฐ๋Š” ์›๋ณธ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฃผ์†Œ ๊ฐ’์ด ๋‹ด๊ฒจ์žˆ์–ด์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฐ”๋กœ๊ฐ€๊ธฐ์— ์ ‘๊ทผํ–ˆ๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์ €์žฅ๋œ ์›๋ณธ์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•ด์„œ ์›๋ณธ์˜ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๊ณ  ์›๋ณธ์— ๋Œ€ํ•œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์›๊ฒฉ์œผ.. 2021. 1. 1.
[React] render() ํ•จ์ˆ˜ renderํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์€ ์˜ค๋Š˜ ์ปดํฌ๋„ŒํŠธ์— ๊ด€ํ•œ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์‹œ์ž‘๋๋‹ค. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๊ฐ€ renderํ•จ์ˆ˜์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค. ์œ„ ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์˜ˆ์ œ๋กœ ์ž‘์„ฑํ•ด๋ดค๋˜ ์ฝ”๋“œ๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ReactDOM.render๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์“ฐ์ธ๊ฒƒ์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ state๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ renderํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๋ฐ–์— ์—†์—ˆ๋Š”๋ฐ ReactDOM.renderํ•จ์ˆ˜๋Š” ๊ณผ์—ฐ ์–ด๋””์— ์“ฐ์ด๋Š” ๊ฒƒ์ผ๊นŒ?๋ผ๋Š” ๊ถ๊ธˆ์ฆ์— ์ด๊ณณ์ €๊ณณ์— ์ฐพ์•„๋ณด์•˜๋‹ค. renderํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ณต์‹๋ฌธ์„œ(ko.reactjs.org/docs/react-dom.html#render)๋ฅผ ๋ณด๊ฒŒ ๋˜์—ˆ์„ ๋•Œ, ReactDOM.renderํ•จ์ˆ˜๋Š” ์ตœ์‹ ์˜ React ์—˜๋ฆฌ๋จผํŠธ.. 2020. 12. 30.
[React] ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ VS ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ ์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์š”์†Œ๋“ค์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” props๋ฅผ ๋ฐ›์•„์„œ elelement๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ! ๊ณผ์—ฐ ๋‘˜์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๊ณ , ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”? ์ €๋Š” ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ '๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ' ์ฑ…๊ณผ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. (ko.reactjs.org/docs/components-and-props.html#function-and-class-components) ์ œ๊ฐ€ ์ดํ•ดํ•œ ๊ฐœ๋…์„ ์“ฐ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ! โœ”์ฝ”๋“œ๋น„๊ต //ํ•จ.. 2020. 12. 29.
๋ฐ˜์‘ํ˜•