์ค๋์ ์ด์ ๋ง์ ๋คํ์ง ๋ชปํ Advanced ๋ถ๋ถ์ ๋ค ํ์์ต๋๋ค. ์ง๊ธ ๊ณ์ ๋จธ๋ฆฟ์์์ ๋งด๋๋ ๊ฑด {}
,,,
{} ๋๋ฌธ์ ์ ์ด๋ ๋ ์๊ฐ์ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค์๐ ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ชป๋ ์ค ์๊ณ useState๋ก clicked ๋ฅผ ์ถ๊ฐํด์ฃผ๊ธฐ๋ ํ๋๋ฐ, ๋ด์ฉ์ด ๋ฌธ์ ๊ฐ ์๋๋ผ ํ์์ ๋ฌธ์ ์๋ค๋ ์ ์์ ๋ค์ ํ ๋ฒ ์๊ธฐ๋ ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
์ค๋๋ ํ๋ฃจ์ข ์ผ Sprint๋ฅผ ํ์๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ ์ ๋ฆฌํ๊ณ ์ถ์๋ ๋ถ๋ถ๋ค์ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํ์ดํ ํจ์
์ฒ์์๋ ํ์ดํ ํจ์์์ ํํ์ ๋ถ๋ถ์ {}๋ก๋ง ๊ฐ์ธ์คฌ์๋๋ฐ ์ด๋ถ๋ถ์์ ์ค๋ฅ๊ฐ ๋ฌ์์ต๋๋ค. ์์ {}๋ฅผ ๊ฐ์ธ์ฃผ์ง ์๊ฑฐ๋ ๊ทธ ์์ return๋ฌธ์ ๋ฃ์ด์คฌ์ด์ผ ํ๋๋ฐ ์ด๋์ ๋ ์๋๊ฒ ๋ฐ๋ฐ ์์ด์ค์ ์๋ Dropdown์ด ๋ํ๋์ง ์์์ต๋๋ค.
๊ทธ๋์ ํ์ด๋ถ์ด๋ ์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ถ๋ถ์์ ๊ณ์ ์ฐพ์๋ดค์ง๋ง ๋ด์ฉ์ ์๋ชป๋ ๋ถ๋ถ์ ์์ด์ ํ์๊น์ง ๋น๊ตํ๋ค ๋ณด๋ ๊ฒฐ๊ตญ ์ค๋ฅ๋ฅผ ๋ฐ๋ก์ก์ ์ ์์์ต๋๋ค. ์๋์ ํํ์ด ์ฌ๋ฐ๋ฅธ ํ์ดํ ํจ์์ ์ฌ์ฉ ๋ฐฉ์์
๋๋ค.
Focus Events
onFocus
์๋ฆฌ๋จผํธ๊ฐ focus ์์ฑ์ ๋ฐ๊ฒ ๋๋ฉด onFocus ์ด๋ฒคํธ ์คํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ํ ์คํธ ์ ๋ ฅ์ฐฝ์ ํด๋ฆญํ์ ๋ onFocus ์ด๋ฒคํธ๊ฐ ์คํ๋ฉ๋๋ค.
onBlur
์๋ฆฌ๋จผํธ๊ฐ focus ์์ฑ์ ๋ ์ด์ ๊ฐ์ง ์๊ฒ๋๋ฉด ์ด๋ฒคํธ๊ฐ ์คํ๋ฉ๋๋ค. onFocus์ ๋ฐ๋๋๋ ๊ฐ๋ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ focus๊ฐ ํ ์คํธ ์ฐฝ์ ๋ฐ๊นฅ ๋ถ๋ถ์ ํด๋ฆญํ์ ๋ onBlur ์ด๋ฒคํธ๊ฐ ์คํ๋ฉ๋๋ค. ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<InputBox>
{isEditMode ? (
<InputEdit
type='text'
value={newValue}
ref={inputEl}
onBlur = {handleBlur} //ํฌ์ปค์ค๋ฅผ ์์ผ๋ฉด ๋ฉ์๋ ์คํ
onChange = {handleInputChange}
/>
) : (
<span onClick = {handleClick}
>{newValue}</span>
)}
</InputBox>
๋ฒ๋ธ๋ง๊ณผ ์บก์ฒ๋ง
๋ฒ๋ธ๋ง์ ์ด๋ฒคํธ๊ฐ ์ ์ผ ๊น์ ๊ณณ์ ์๋ ์์์์ ์์ํด ๋ถ๋ชจ ์์๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ๋งํฉ๋๋ค.
๋ค๋ฅธ ๋ง๋ก๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ถํฐ window๊น์ง ์ด๋ฒคํธ๋ฅผ ์ ํํฉ๋๋ค. (ํ์ → ์์)
๋ฐ์ํ๋ ๋ชจ์์ด ๋ฌผ์ ๊ฑฐํ(bubble)๊ณผ ๋ฎ์๊ธฐ ๋๋ฌธ์ ๋ฒ๋ธ๋ง์ด๋ผ๊ณ ํฉ๋๋ค.
์๋์ HTML ์ฝ๋๋ฅผ ๋ณด๋ฉด FORM > DIV > P ํํ๋ก ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ฌ๊ธฐ์
๋ฅผ ํด๋ฆญํ๋ฉด <p>์ ํ ๋น๋ onclick ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ์ดํ ๋ฐ๊นฅ์ <div>์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ๋ค์์๋ ๊ทธ ๋ฐ๊นฅ์ <๋๊ทธ>์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ์ด๋ ๊ฒ document ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง, ๊ฐ ์์์ ํ ๋น๋ onclick ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค.
<form onclick="alert('form')">FORM
<div onclick="alert('div')">DIV
<p onclick="alert('p')">P</p>
</div>
</form>
onclick๊ณผ ๊ฐ์ ๊ฑฐ์ ๋ชจ๋ ์ด๋ฒคํธ๋ ๋ฒ๋ธ๋ง์ด ๋ฉ๋๋ค. ์ฐธ๊ณ ๋ก focus ์ด๋ฒคํธ์ ๊ฐ์ด ๋ฒ๋ธ๋ง์ด ๋์ง ์๋ ์ด๋ฒคํธ๋ ์์ต๋๋ค.
๋ฒ๋ธ๋ง์ ์ค๋จํ๊ธฐ ์ํด์๋ stopPropagation()
์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์๋์ ๊ฐ์ด <p>์ stopPropagation์ ํ๋ฉด <p>์ ๋ถ๋ชจ ์์์ธ div์ form์ onclick์ ๋์ํ์ง ์์ต๋๋ค.
<form onclick="alert('form')">FORM
<div onclick="alert('div')">DIV
<p onclick="event.stopPropagation()">P</p>
</div>
</form>
์บก์ฒ๋ง์ ๋ฒ๋ธ๋ง๊ณผ ๋ฐ๋๋ก ์ด๋ฒคํธ๊ฐ ํ์ ์์๋ก ์ ํ๋๋ ๋จ๊ณ๋ฅผ ๋งํฉ๋๋ค.
๋ค๋ฅธ ๋ง๋ก๋ window๋ก๋ถํฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๊น์ง ์ด๋ฒคํธ๋ฅผ ์ ํํฉ๋๋ค. (์์ → ํ์)
๋ฆฌ์กํธ ํํธ ๊ณต๋ถํ ์ง ์ค๋๋์ด์ ๋ง์ด ๊น๋จน์ ๊ฒ ๊ฐ์ ๊ฑฑ์ ์ ๋ง์ด ํ๊ณ ์์์ต๋๋ค. ํ์ง๋ง ์ข์ ํ์ด๋ถ๋ ๋ง๋๊ณ , Advanced ํํธ๊น์ง ํ๋ฉด์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ ๋๋ถ์ ๋น ๋ฅด๊ฒ ๋ณต์ตํ ์ ์์ด ์ข์์ต๋๋ค๐
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL 42: [React] ์ํ ๊ด๋ฆฌ (0) | 2021.09.17 |
---|---|
TIL 41: [React] ์ํ ๊ด๋ฆฌ (0) | 2021.09.17 |
TIL 39: [React] ์ปดํฌ๋ํธ ๋์์ธ (0) | 2021.09.14 |
TIL 38: [React] ์ปดํฌ๋ํธ ๋์์ธ (0) | 2021.09.14 |
TIL 37: [Web Server] ๊ธฐ์ด (0) | 2021.09.11 |