Today, What I learned?
์ฃผ๋ง์ฏค์ ๋์์ธ ์์ ์ฌํญ์ ๋ฐ์ํ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ธ ์ธํ ํ๊ทธ ํด๋ฆฌ์ด ๋ฒํผ์ด ์ ๋๋ก ๋์ํ์ง ์๋ ์ด์..
๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ค๊ฐ ์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ์ ๋ํด์๋ ์ฐพ๊ฒ ๋์ด์ ํ ๋ฒ ์ ๋ฆฌํด ๋ณธ๋ค.
์์ธ ํ์
์ผ๋จ ์ฒ์์ ๋์์ด ์ ๋๋๋ฐ, ํ ๋ฒ ์ง์ฐ๊ณ ๋ ๋ค๋ถํฐ ์ ๋๋ก ๋์์ด ๋์ง ์์๋ค.
๊ทธ๋์ ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋.. state๋ ๋ณ๊ฒฝ์ด ์ ๋์์ง๋ง input์ฐฝ์ ๋น์ด๋ฒ๋ฆฐ ๊ฐ์ด ๋ค์ ๋ฐ์์ด ์ ๋๊ณ ์๋ ์ํ..
input ํ๊ทธ์ state์ ๊ฐ์ด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์์ด ๋์ง ์๊ณ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค.
์์ธ์ ๋ฐ๋ก defaultValue
!..
๋ง์ดํ์ด์ง๋ ๋์ฒด๋ก ์์ ํ๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์์์ ์ผ๋ก value ๋์ defaultValue๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ๋ค. (๊ธฐ๋ณธ๊ฐ์ด ์กด์ฌํ๋๊น)
๊ด๋ จํด์ ์์น ํ๋ค๊ฐ ์ ์ด ์ปดํฌ๋ํธ(Controlled component)์ ๋น์ ์ด ์ปดํฌ๋ํธ(Uncontrolled component)์ ๋ํ ๊ธ์ ๋ณด๊ฒ ๋์๋ค. ์ด๋ฉด์ธ ์ฉ์ด๋ค... ๐
์ ์ด ์ปดํฌ๋ํธ vs ๋น์ ์ด ์ปดํฌ๋ํธ
์ ์ด ์ปดํฌ๋ํธ
๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์ด๋ ๋ค.
<input>, <textarea> ๋ฑ์ ํผ ์๋ฆฌ๋จผํธ๋ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ทธ ์์ ์ state๋ฅผ ๊ด๋ฆฌํ๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํผ์ ๋ฐ์ํ๋ ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ์ ์ดํ ์ ์๋ค. ์ด๋ฐ ๋ฐฉ์์ ํผ ์๋ฆฌ๋จผํธ๋ฅผ ์ ์ด ์ปดํฌ๋ํธ๋ผ๊ณ ํ๋ค.
์์ ๋ง์ ์ข ํ์ด์ฐ๋ฉด, ๋ณดํต input ํ๊ทธ์๋ onChange ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฌ๋ ค์๋ค.
- ์ฌ์ฉ์๊ฐ ํ๊ทธ์ ๊ฐ์ ์ ๋ ฅํ๋ค
- ์ ๋ ฅํ ๋๋ง๋ค onChange ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋์ > setState๋ฅผ ํตํด state ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
- ๋ณ๊ฒฝ๋ state ๊ฐ์ ํ๊ทธ์ value ๊ฐ์ ํ ๋น
const [email, setEmail] = useState<string>('');
const changeEmail = (event: ChangeEvent<HTMLInputElement\>) => {
setEmail(event.target.value);
};
<\CustomInput
id="email"
labelText="์ด๋ฉ์ผ"
placeholder="์ด๋ฉ์ผ์ ์
๋ ฅํด์ฃผ์ธ์."
value={email} // <<<<
onChange={changeEmail} // <<<<
/>
์ด๋ ๊ฒ ํผ ํ๊ทธ๊ฐ ์ปดํฌ๋ํธ์ ์ ์ด๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ ์ด ์ปดํฌ๋ํธ.
๋น์ ์ด ์ปดํฌ๋ํธ
๋น์ ์ด ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ์๋, DOM ์์ฒด์์ ํผ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฃจ์ด์ง๋ค.
state์ ๋ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋์ ์ useRefํ
์ ์ด์ฉํด์ DOM์์ ํผ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์!
const emailRef = useRef<HTMLInputElement | null\>(null);
const handleSubmit = () => {
const name = emailRef.current.value;
};
return(
<form onSubmit={handleSubmit}>
<input
type="text"
ref={inputRef}
/>
<button>์
๋ ฅ</button>
</form>
);
- ์ฌ์ฉ์๊ฐ ํ๊ทธ์ ๊ฐ์ ์ ๋ ฅ
- ๋ฒํผ์ ๋๋ฅด๋ฉด ref๋ฅผ ํตํด ๊ฐ์ ์ป์
๋์๊ณผ์ ์ ๋ณด๋ฉด ์ปดํฌ๋ํธ์ ์ ์ด๋ฅผ ๋ฐ์ง ์๋๋ค.
๋น์ ์ด ์ปดํฌ๋ํธ์ ๋ํด์ ๊ณต์๋ฌธ์์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ค๊ณ ์๋ค.
React ๋ ๋๋ง ์๋ช ์ฃผ๊ธฐ์์ ํผ ์๋ฆฌ๋จผํธ์ value ์ดํธ๋ฆฌ๋ทฐํธ๋ DOM์ value๋ฅผ ๋์ฒดํฉ๋๋ค. ๋น์ ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด React ์ด๊น๊ฐ์ ์ง์ ํ์ง๋ง, ๊ทธ ์ดํ์ ์ ๋ฐ์ดํธ๋ ์ ์ดํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ value ์ดํธ๋ฆฌ๋ทฐํธ ๋์ defaultValue๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ํ์ defaultValue ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ณ๊ฒฝํด๋ DOM์ ๊ฐ์ด ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
๊ฐ์ฅ ๋ง์ง๋ง ๋ด์ฉ์ด ๋ฐ๋ก ๊ธฐ์กด ์ฝ๋์์ value๊ฐ์ด ์ ๋ฐ์ดํธ๋์ง ์์๋ ์ด์ !..
๋๋ ์ค์๊ฐ์ผ๋ก ๊ฐ์ด ํ์ํ๋ ๋งค๋ฒ ์ฌ๋ ๋๋ง์ด ๋๋ ์ ์ด ์ปดํฌ๋ํธ ๋ฐฉ์์ผ๋ก ํผ์ด ๊ด๋ฆฌ๋์ด์ผ ํ๋ค..
๋น์ ์ด ์ปดํฌ๋ํธ์ ํด๋นํ๋ defaultValue
๋ผ๋ ์์ฑ๊ฐ์ด ์ ํฉํ์ง ์์๋ ๊ฒ์ด๋ค!
๊ทธ๋์ value
๋ก ๋ณ๊ฒฝํด ์ฃผ์๋๋ ์์ฃผ ์ ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์๋์น ์๊ฒ ์๊ฐ๋ณด๋ค ๋ง์ ๊ฒ์ ์๊ฒ ๋ ๋ฒ๊ทธ์๋ค..! ๐
์ฐธ๊ณ
https://ko.reactjs.org/docs/uncontrolled-components.html
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์๋ก๊ณ ์นจ ์ ์ข์์ ์ ์งํ๊ธฐ (0) | 2023.03.09 |
---|---|
[React+typescript] ์นด์นด์คํก ๊ณต์ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ (2) | 2023.03.07 |
[React] React-query์ staleTime, cacheTime, invalidateQueries (0) | 2023.03.03 |
[React] React.memo๋ก ์ต์ ํํ๊ธฐ (0) | 2023.03.02 |
[React] ์ด๋ฏธ์ง ํ๊ทธ ๋์ ๊ฒฝ๋ก ์ถ๊ฐ src require (0) | 2023.02.28 |
Comment