'정의되지 않음'일 수 있는 개체를 호출할 수 없습니다 오류 질문
안녕하세요 과제 중 궁금한 점이 있어 질문 남깁니다
pages - index 파일
export default function DetailBoardPage(): JSX.Element {
return (
<>
<DetailBoard></DetailBoard>
<CommentWrite></CommentWrite>
<CommentList></CommentList>
</>
);
}board list presenter 파일
export default function CommentListItemUI(
props: ICommentListItemUI
): JSX.Element {
// 수정 아이콘 클릭 시 수정 화면으로 전환
const [isEdit, setIsEdit] = useState(false);
const onClickUpdateIcon = (): void => {
setIsEdit(true);
return (
<>
{!isEdit && (
. . .
)}
{isEdit && (
<CommentWrite
item={props.item}
isEdit={true}
setIsEdit={setIsEdit}
></CommentWrite>
)}
</>
);
}
CommentWrite 컴포넌트를 두 곳에서 사용하고 있습니다
1번에서는 아무런 props 인자를 넘겨주지 않고 있고요
2번에서는 3가지 props 인자를 넘겨주고 있습니다
types 파일
export interface ICommentWrite {
item?: IBoardComment;
isEdit?: boolean;
setIsEdit?: Dispatch<SetStateAction<boolean>>;
}이에 맞춰 작성한 interface 입니다
setIsEdit state에 ? 기호를 붙이니
CommentWrite 파일(바로 아래 파일)의 props.setIsEdit state 사용 구간에서 '정의되지 않음'일 수 있는 개체를 호출할 수 없다는 오류가 뜹니다
export default function CommentWrite(props: ICommentWrite): JSX.Element {
const onClickUpdate = async (): Promise<void> => {
. . .
props.setIsEdit(false);
};
const onClickCancel = (): void => {
props.setIsEdit(false);
};
return (
. . .
);
}
찾아보니 undefined / null 값을 제대로 다루지 못할 때 생기는 오류라고 하는데요
해당 state는 한 곳에서만 props 인자로 전달하고 있기 때문에 undefined 값이 나오는 경우가 필연적입니다
이런 경우 해결할 수 있는 방법이 있을까요?
만약 타입 지정과 관련된 방법으로 해결할 수 없는 문제라면 props 인자를 한 곳에서만 받도록 파일을 합칠까 합니다
답변 1
0
안녕하세요! zero.1.0.one.xx님!
아래의 타입스크립트에서 '?'는 없을 수도 있음(undefined)을 의미해요!
interface IProps {
setIsEdit?: () => void
}
따라서, 없을 수도 있는데 어떻게 사용하니? 라는 문구의 메시지가 현재 보여지고 있는 것이랍니다!
해결하는 방법으로는,
1. 있는지 없는지 체크해서, 없을때는 에러 알림을 보여주고 있으면 실행하기
if(props?.setIsEdit !== undefined){
props.setIsEdit("철수") // 위 if문에서 props 안에 undefined가 있음이 확인됐으므로,
// 현재 라인에서는 옵셔널체이닝('?')가 없어도 됨
} else {
alert("에러났어요!")
}있을때만 실행하기
props?.setIsEdit("철수") // 옵셔널체이닝('?')을 통해 있을 때만 실행하기
fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다
0
36
1
댓글 기능 구현 중 질문드립니다.
0
66
1
쿠폰코드 발급
0
132
2
example 서버 플레이그라운드, API 접속 모두 안됩니다.
0
86
2
문의드립니다!! ㅠㅠ
0
101
2
graphql 백엔드 서버가 포폴용 빼곤 접속이 안됩니다.
0
76
2
_app.js 작성 이후로 에러가 발생하네요
0
93
2
학습자료
0
70
2
학습자료가 안열립니다.
0
49
2
플레이 그라운드 퀴즈 문제 질문이 있습니다.
0
59
0
기존강의 구매자, 업데이트 끝인가요?
0
109
3
업데이트 버전 수강
0
88
2
완벽한 프론트엔드
0
136
2
나만의 쇼핑몰 샘플 페이지 접속 확인부탁드립니다.
0
81
1
graphql 접속이 안됩니다.
0
100
2
const, let 사용 질문 드립니다.
0
70
2
싸이월드 만들기 1탄 피드백 부탁드립니다.
0
122
2
회원가입 과제 피드백 부탁드립니다.
0
80
2
styled.span / styled.input "CSS 자동완성"
0
47
1
쿠폰 발급 관련
0
166
2
서버 502 error
0
247
2
쿠폰 다시 부탁드려도 될가여?
0
140
2
a태그 패딩했을때 왜 크기가 줄어들지 않고 늘어나나요
0
184
2
2분 44초 질문
0
131
3






.png)