| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 참조자료형
- 객체지향
- 코드스테이스
- css
- 코드스테이츠
- JS
- css in js
- 자바스크립트
- 프론트엔드
- 계산기
- Prototype
- 프로토타입
- Javascript #코드스테이츠
- html
- cta button
- condestates
- CDD
- OOP
- frontend
- WAI-ARIA
- 회고
- self reliance
- cta버튼
- Router
- codestate
- 원시자료형
- codestates
- 개발자
- 호스트인식
- JavaScript
- Today
- Total
jh.nrtv
[error] Type error: 'result' is possibly 'null' 본문
Next.js와 typescript를 사용한 프로젝트를 진행하면서 만난 에러이다.
Type error: 'result' is possibly 'null'.
const result = await db.collection("community").findOne({ _id: new ObjectId(props.params.id) });
return (
<div>
...
<div>오늘의 노력을 간략하게 소개해주세요.</div>
<input className="title_box" name="title" placeholder="제목" defaultValue={result.title} />
<div>어떻게 성장할까요?</div>
<textarea className="content_box" name="content" placeholder="내용" defaultValue={result.content} />
...
위 코드에서 result.title 와 result.constent 에서 result가 'null'인 것 같다는 에러를 뱉어내고 있다.
찾아보니 Typescript가 result가 비어있는 객체일 수도 있다고 판단하기 때문이라고 한다.
따라서 빈 객체인 result 안의 title이나 content에 접근하려고 하니 에러를 뱉어내는 것이다.
이를 해결하기 위해서는 여러 방법이 있는데
나는 그 중에 가장 쉬운 옵셔널 체이닝을 사용했다.
해결
input className="title_box" name="title" placeholder="제목" defaultValue={result?.title} />
result?.title 과 같이 접근 전에 ? 를 붙이면 된다.
이는 result 객체 안에 접근하기 전에 result 객체의 존재를 먼저 확인하는 간단한 문법이다.
result 객체가 존재하면 코드를 실행하고 없으면 무시하라는 의미이다.
예전에 팀 프로젝트를 진행하면서 Array 형태의 data를 api로 받아서 .map()으로 화면에 뿌려준 적이 있었는데
그때 에러를 막기 위해서 Array.isArray(data)로 형태를 확인한 후에 진행되도록 했던 적이 있는데 그것과 비슷한 것 같다.
매우 간단하면서도 에러를 방지할 수 있는 효율적인 문법이라는 생각이 든다.
참조
https://kyounghwan01.github.io/blog/TS/object-null/#%E1%84%8B%E1%85%A8%E1%84%89%E1%85%B5
Object is possibly 'null'
Object is possibly 'null'
kyounghwan01.github.io
'Error' 카테고리의 다른 글
| [error]Error: Hydration failed because the initial UI does not match what was rendered on the server. (0) | 2023.07.17 |
|---|---|
| [error] 배포시 미디어쿼리 적용 안되는 에러 (0) | 2023.07.17 |
| [error] vercel배포중 Module not found: Can't resolve 'perf_hooks' ReactJS (0) | 2023.07.14 |
| [error]kakaoMap TypeError: window.kakao.maps.LatLng is not a constructor 에러 (0) | 2023.07.08 |
| [트러블 슈팅] data.map()에서 element에 component 연결 (0) | 2023.04.10 |