JavaScript
Optional chaining (?.)에 대해서
citron031
2022. 12. 28. 23:05
ES 2020에서 새로운 자바스크립트 문법을 지원하게 되었다.
Optional chaining은 다음과 같이 작성할 수 있다.
const a = {};
const b = a?.name; // a && a.name
위의 예제처럼 사용할 수 있는데, b의 값은 물론 undefined이다.
하지만, 위의 예제로는 이 문법의 유용함을 알리기에 조금 무리가 있다.
React에서 자바스크립트를 사용할 때 유용하게 사용할 수 있었는데, props로 받은 객체 데이터에 어떤 데이터는 있을 수도 있고 없을 수도 있다.
이럴 때 만약 객체 내부에 있을 수도 있고 없을 수도 있는 데이터가 객체이고, 그 객체의 데이터 내부의 프로퍼티에 접근할 일이 있을 수 있다.
이때 별도로 조건문을 설정하지 않으면, 존재하지 않는 객체 (undefined)의 프로퍼티를 찾는 꼴이 되어 에러를 발생시킨다.
이럴 때 Optional chaining을 사용하면, 간단하게 이 문제를 해결할 수 있다.
const Post = ({data}) => {
return (
<div>
<h1>{data.title}</h1>
<img src={data.image} alt={data.alt} />
<h3>{data.content}</h3>
<h4>{data?.options?.comments?.length}</h4>
</div>
)
}
다소 억지스러운 데이터일 수도 있지만, data 내부에 options는 필수 데이터가 아니고, 그 객체의 프로퍼티인 comments 배열 역시 그렇다.
이때, ?를 붙여줌으로써, 이 프로퍼티의 값이 유효한지 확인하고 유효하지 않다면 뒤의 체인된 메서드를 실행하지 않고 undefined를 반환하기에 이 컴포넌트는 data props내부에 options객체가 있던 없던 언제나 제대로 작동한다.