Today What I learned?
์ด์ ์ ์ด์ด ๋ฆฌ๋์ค ํดํท ํฌ๋๋ฆฌ์คํธ๋ฅผ ํ์
์คํฌ๋ฆฝํธ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ฉฐ ํด๊ฒฐํ ๋ง์ ์ค๋ฅ๋ค์ ๊ธฐ๋กํด ๋ณธ๋ค..!!
์ด์ฐ์ด์ฐ ๋ชจ๋ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ณ ์ ์ ์๋์ด ๋๊ณ ์๋ค.. ๐ฅบ
๐ง ๋ฒํผ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ์ค๋ฅ ํด๊ฒฐ
Type '' is missing the following properites from type ~~
Type '' is missing the following properites from type ~~
์๋ง ๋ด๋ ๋ฒํผ ์ปดํฌ๋ํธ์ ๋ค๋ฅธ ํจ์ props๊ฐ ์๋ค๋ ์๊ธฐ ๊ฐ๋ค.
๊ธฐ์กด ์ฝ๋๋ ์ ํจ์๋ค ์ค ํ๋๋ง ๋ฃ์ด์ฃผ์ด ๋ฒํผ ์ปดํฌ๋ํธ๋ฅผ ๊ณตํต์ผ๋ก ์ฐ๊ณ ์๋ ์ํ์๊ธฐ ๋๋ฌธ์ ๊ผญ ๋ชจ๋ ํจ์ props๋ฅผ ๋ฐ์ ํ์๊ฐ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ํ์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ํ๋ ํ์ ์์ฑ์ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์๋ฅผ ๋ฃ์ด์ฃผ์๋๋ 1์ฐจ ํด๊ฒฐ๋์๋ค.
Cannot invoke an object which is possibly 'undefined'
ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ (..)
ํด๋ฆญ ์ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ํจ์๊ฐ ๋์ํ๋๋ก ํ๋ ํธ๋ค๋ฌ ํจ์์ ๋ฆฌํด๊ฐ๋ค์๊ฒ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค.
Cannot invoke an object which is possibly 'undefined'
ํจ์๊ฐ undefined
๊ฐ์ ๊ฐ์ง ์ ์๋ค๋ ์๋ฏธ!.. ํธ์ถ๋๋ ํจ์์๊ฒ๋ ์ต์
๋ ์ฒด์ด๋ ์ฐ์ฐ์๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฐ ์์ผ๋ก!.. ํจ์์๊ฒ๋ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(?.)๋ฅผ ๋ฃ์ด์ค ์ ์๋ค๋ ๊ฒ์ ์ฒ์ ์์๋ค. ๐ค
์ด๋ ๊ฒ 2์ฐจ ํด๊ฒฐ์ด ๋์์ผ๋....
Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.
์ด๋ฒ์ ๋งค๊ฐ๋ณ์ id ์ชฝ์ ์๋ฌ๋ค.. ใ ใ
id์ ๊ฒฝ์ฐ์๋ ์๋ฃ ํ ๊ธ๊ณผ ์ญ์ ์์๋ง ํ์ํ๊ธฐ ๋๋ฌธ์ ์ ํ์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ํ๋ ๊ฐ์ด๋ผ ์ต์ ๋ ์ฒด์ด๋์ ๋ฃ์ด์ฃผ์๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
์๋!.. ์์ด๋๊ฐ ์๋ค๋ฉด undefined
์ด ๋๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ์ ๋ํ ํธ๋ค๋ง์ด ํ์ํ๋ค.
์์ด๋๊ฐ undefined
์ผ ๊ฒฝ์ฐ์๋ ๋น ๋ฌธ์์ด์ ๋ฃ์ด์ฃผ๋๋ก currentId
๋ผ๋ ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ๋ค.
์ด๋ก์จ ๋ฒํผ ์ปดํฌ๋ํธ ๊ด๋ จ ์ค๋ฅ๋ค ํด๊ฒฐ.. ๐
๐ง ๋ถ๋ชจ ์ปดํฌ๋ํธ์ useRef์ ref๊ฐ์ props๋ก ๋๊ธฐ๋ฉฐ ๋ฐ์ํ ์ค๋ฅ
๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ต์๋จ์์ current.focus()
๋ฅผ ์จ์ฃผ๊ธฐ ์ํด useRef ํ
์ ์ฌ์ฉํ๊ณ ,
์ด๊ฑด ์ง์ญ๋ณ์๋ฅผ ์ํด ์ฐ๋ ๊ฒ ์๋๋ผ DOM ์กฐ์์ ์ํ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์ <HTMLInputElement>
ํ์
์ผ๋ก ์ง์ ํด ์ฃผ์๋ค.
์ด๊ฒ์ ์คํ์ผ ์ปดํฌ๋ํธ๋ก ๋ง๋ Inputs
์๊ฒ props๋ก ์ ๋ฌํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์๋ค.
const titleInput = useRef<HTMLInputElement | null>(null);
const contentInput = useRef<HTMLInputElement | null>(null);
...
<form onSubmit={submitHandler}>
<Inputs
...
ref={titleInput}
/>
<Inputs
label={'๋ด์ฉ'}
id={'contents'}
value={content}
onChange={changeContentHandler}
ref={contentInput} // ์ค๋ฅ ๋ฐ์์ง์ !!
/>
<Button type="submit">์ถ๊ฐ</Button>
</form>
๋ฐ์ํ ์ค๋ฅ๋ ์ด๋ฌ๋ค.
Type 'RefObject<HTMLInputElement>' is not assignable to type '(inputElement: HTMLInputElement) => void'.
Type 'RefObject<HTMLInputElement>' provides no match for the signature '(inputElement: HTMLInputElement): void'.
์๋๋ Input.tsx
์ธ๋ฐ ์ฌ๊ธฐ์ ๋ฐ์์จ props์ ํ์
์ ์ง์ ํ ๋ ref์ ํ์
์ด ๋ญ๊ฐ ์ ๋ง๋๋ค๋ ๋๋์ด ๋ค์๋ค. ๐ค
์ค์ ๋ก๋ ์ด ์ปดํฌ๋ํธ์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์๊ณ ..
interface InputTypes {
//...
ref: HTMLInputElement | null;
}
const Inputs = ({ label, id, value, onChange, ref }: InputTypes) => {
return (
<>
<Label htmlFor={id}>{label}</Label>
<Input
//....
ref={ref} // ์ค๋ฅ ๋ฐ์์ง์ !!
/>
</>
);
์ฐพ์๋ณด๋ ref์๋ ์๋์ ๊ฐ์ด ForwardedRef
๋ผ๋ ํ์
์ ๋ฃ์ด์ค๋ค๊ณ ํ๋ค.
React.ForwardedRef<HTMLํ๊ทธํ์
>
๋ ๊ฐ์ ๊ฒฝ์ฐ๋ input ํ๊ทธ์ ๋ํ ref์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋ฃ์ด์ฃผ์ด ํด๊ฒฐํ๋ค.
ref: ForwardedRef<HTMLInputElement>;
๋ง์ง๋ง์ผ๋ก index ํ์ผ์ ์์ ํด์ฃผ๋ค๋ณด๋ dom ์ ํํ๋ ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด์ฃผ์ด ํด๊ฒฐํ๋ค!..
์ด๋ ๊ฒ 40์ฌ ๊ฐ ๋์ด๊ฐ๋ ์๋ฌ๋ค์ ๋ชจ๋ ํด๊ฒฐํ๊ณ ํ์ ์คํฌ๋ฆฝํธ ๋ง์ด๊ทธ๋ ์ด์ ์๋ฃ..
ํ์ ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ง ์ตํ ์ฑ๋ก ๋ฌด์์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ค ๋ณด๋ ์ ๋ง ๋ง์ ์๋ฌ๋ค์ ๊ฒช์๋ค. ๐
์ง์ ๋ถ๋ชํ๋ค ๋ณด๋ ๋ ๋ง์ ๊ฒ๋ค์ ์ป๊ฒ ๋์๊ณ ํ์ ์คํฌ๋ฆฝํธ์ ๋ํด์ ์ข ์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค.
๋ ๋ค๋ฅธ ๊ฒ๋ ํ๋ฒ ๋ฆฌํฉํ ๋ง ํด๋ณด๋ ๊ฒ์ ์๋ํด์ผ๊ฒ ๋ค!..
์ฐธ๊ณ ๊ธ
https://bobbyhadz.com/blog/typescript-cannot-invoke-an-object-which-is-possibly-undefined
Comment