[๋ฆฌ์กํธ] forms ์ ๋ฆฌ โจ
์ฐธ๊ณ ์๋ฃ: ์ธํ๋ฐ-๋ฆฌ์กํธ๊ฐ์
[๋ฌด๋ฃ] ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ(React) - ์ธํ๋ฐ | ๊ฐ์
์๋ฐ์คํฌ๋ฆฝํธ์ CSS ๊ธฐ์ด ๋ฌธ๋ฒ๊ณผ ํจ๊ป ๋ฆฌ์กํธ์ ๊ธฐ์ด๋ฅผ ํํํ๊ฒ ๋ค์ง ์ ์์ต๋๋ค., ๊น๋ํ ๊ฐ์์๋ฃ, ๊ผผ๊ผผํ ์ค๋ช ์ผ๋ก์ฝ๊ฒ ๋ฐฐ์ฐ๋ ๋ฆฌ์กํธ ๊ฐ์์ ๋๋ค. ๐จ๐ซ ๋ฆฌ์กํธ์ ์ธ๊ณ๋ก์ด๋ํฉ๋๋ค ๐ซ
www.inflearn.com
form์ด๋?
์์, ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ
์ฌ๊ธฐ์ฌ html์ ํผ๊ณผ ๋ฆฌ์กํธ์ ํผ์ ์ข ์ฐจ์ด๊ฐ ์๋ค.
html ํผ์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ ์ดํ ์ ์์
1. form
์ด ์์ ์ฝ๋๋ง ๋ด๋,
๋จ์ํ type, name๋ง ์ ์ฉ๋์ง ์ด๊ฒ์ด ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ์ ์ดํ ์๋ ์๋ค
ํ์ง๋ง, ๋ฆฌ์กํธ์์๋ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ์ ์ดํ ์ ์๋ค. -> controlled component
์ฆ, component element๋ ๊ฐ์ด ๋ฆฌ์กํธ์ ํต์ ๋ฅผ ๋ฐ๋ input form element
๋ค์ ํ๋ฒ, html๊ณผ ๋ฆฌ์กํธ ํผ์ ๋น๊ต ๋ถ์ํด๋ณด์
html์์๋ ๊ฐ element๊ฐ ๊ฐ state๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ค. ์ด๋ฌ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๊ฐ๊ฐ์ ๊ฐ์ ์ ๊ทผํ๊ฒ๋ ์ฌ์ด ์ผ์ด ์๋๋ค. ํ์ง๋ง ๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ ์์ state์ ๋ชจ๋ ๊ด๋ฆฌํ๊ฒ ๋จ ๋, state ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ setState๊ฐ์ ์ํด ๋ณ๊ฒฝ๋๋ค.
์ด ํจ์๋ฅผ ๋ณด๋ฉด value ๊ฐ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ state์์ ๊ฐ์ ๊ฐ์ ธ๋ค ๋ฃ์ด์ฃผ๋ ๊ฒ ๊ทธ๋์ state์ ๊ฐ์ด input์ ๋ฃ์ด์ฃผ๊ฒ ๋๋ ๊ฒ!
๋, ์ ๋ ฅ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ์ ์ฉ๋๋ onChange์ handleChangeํจ์๊ฐ ํธ์ถ๋๋ค. handleChangeํจ์์์๋ setValue ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๊ฐ์ value๋ผ๋ ๊ฐ์ ์ ์ฉ์ํจ๋ค. ๋, ์ฐธ๊ณ ๋ก handleChange์ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ event ๊ฐ์ฒด๋ฅผ ๋ํ๋ธ๋ค. event.target์ ํ์ฌ event๊ฐ ๋ํ๋ด๋ ํ๊ฒ์ ์๋ฏธํ๊ณ , event.target.value๊ฐ์ ํด๋น ์ด๋ฒคํธ ํ๊ฒ์ value๊ฐ์ ์๋ฏธํ๋ค.
์ฆ, ์ด ์ฝ๋๋ฅผ ํตํด ๋ฆฌ์กํธ์์๋ ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ์ง์ ์ ์ดํ ์ ์์์ ๋ํ๋ธ๋ค. ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ์ํ๋๋๋ก ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
2. ๋ค์ํ form ํ๊ทธ
1) textarea ํ๊ทธ : ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๊ธด ํ ์คํธ๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ ์ํ html ํ๊ทธ
<textarea>
์๋
ํ์ธ์. ์ง๊ธ์ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ฐ๋ ์ค์
๋๋ค.
</textarea>
์ด๋ฐ ์์ผ๋ก ใ ใ
2) select ํ๊ทธ: drop-down(์ฌ๋ฌ๊ฐ์ง ๋ชฉ๋ก ์ค ํ๋๋ฅผ ์ ํํ ์ ์๋ ๋ชฉ๋ก) ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ htmlํ๊ทธ
์ด๋ฐ ์์ผ๋ก ๋๋กญ๋ค์ด์์ ํ๋์ ์ต์ ์ ์ ํํ ์ ์๋ form ํจ์
์ด๋ฐ ์์ผ๋ก ์ฌ๋ฌ๊ฐ์ ์ต์ ์ ์ ํํ ์ ์๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค
3)file-input ํ๊ทธ: ๋๋ฐ์ด์ค ์ ์ฅ์ฅ์น๋ก๋ถํฐ ํ๋ ๋๋ ์ฌ๋ฌ๊ฐ์ ํ์ผ์ ์ ํํ ์ ์๊ฒ ํ๋ html ํ๊ทธ
์ฐธ๊ณ ๋ก ์ด ํ๊ทธ๋ uncontrolled component๋ก ๊ฐ์ด ๋ฆฌ์กํธ์ ํต์ ๋ฅผ ๋ฐ์ง ์๋๋ค.
3. ์ฐธ๊ณ
1) ๋ง์ฝ, ํ๋์ ์ปดํฌ๋ํธ์์ ์ฌ๋ฌ๊ฐ์ input๊ฐ์ ์ ์ฉ์ํฌ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น
๊ทธ๋ด๋, ์ฌ๋ฌ๊ฐ์ state๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ ์ ๋ ฅ์ ๋ํด ์ฌ์ฉํ๋ค. -> multiple input
2) ๋๋ value ๊ฐ์ ๋ฃ๋, ๊ฐ์ ์์ ๋กญ๊ฒ ์์ ํ ์ ์๊ฒ ํ๋ ค๋ฉด -> input null value
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋ฉด ์ฒ์์๋ hi๋ผ๋ ๋ฒจ๋ฅ๊ฐ์ด ์ ํด์ ธ ์๋ค๊ฐ
1์ด ๋ค์ value ๊ฐ์ null์ด ๋ฃ์ด์ง๋ฉด์ ์ฌ์ฉ์๊ฐ ์์ ๋ฝ๊ฒ input ๊ฐ์ ๋ฃ์ ์ ์๋๋ก ํ ์ ์๋ค!