행복을 담는 블로그
[TIL] 240220(화) Optional Chaining이란? 본문
const [letters, setLetters] = useState(null);
const fetchLetters = async () => {
const { data } = await axios.get("http://localhost:4000/letters");
setLetters(data);
};
useEffect(() => {
fetchLetters();
}, []);
컴포넌트가 렌더링이 처음 됐을 때, 비동기 함수가 실행되기 이전에 map이나 filter 함수가 먼저 호출된다.
따라서 letters에 아무 데이터가 들어있지 않는다면, 해당 데이터를 읽어 올 수 없으므로 오류가 난다.
async보다 map 또는 filter 함수가 먼저 돌아간다.
Error가 난 LetterList로 들어가보면, filter와 map 함수가 실행이 되고 있었다.
이때 ? : optional chaning
을 사용하여 함수 실행 오류를 막아준다.
import { useContext } from "react";
import LetterItem from "./LetterItem";
import { Context } from "context/Context";
function LetterList({ writedTo }) {
const { letters } = useContext(Context);
const filteredLetters = letters?.filter((letter) =>
writedTo ? letter.writedTo === writedTo : true
);
return (
<div>
{filteredLetters?.map((item) => {
return <LetterItem key={item.id} item={item} />;
})}
</div>
);
}
export default LetterList;
📌 Optional Chaining(?)
이란?
Optional chaining (?.) 연산자는 객체의 속성에 접근하거나 함수를 호출하는데 사용된다.
이때 ? 연산자를 사용하여 접근한 객체나 호출한 함수가 undefined 또는 null일 경우, 오류를 발생시키지 않고, short circuit(단축 평가)을 발생하여 undefined를 반환한다.
따라서, 코드에서 객체나 함수에 안전하게 접근할 수 있으며, 해당 객체나 함수가 존재하지 않는 경우에도 코드가 오류를 발생시키지 않고 정상적으로 작동할 수 있다.
'TIL' 카테고리의 다른 글
[TIL] 240226(월) Youtube Data Api 불러오기 (0) | 2024.02.27 |
---|---|
[TIL] 240222(목) 비동기 통신 : axios의 CRUD (1) | 2024.02.23 |
[TIL] 240219(월) 리덕스 미들웨어 Redux-Thunk (3) | 2024.02.19 |
[TIL] 240216(금) Redux toolkit을 배워보자💪🏻 (0) | 2024.02.16 |
[TIL] 240215(목) firebase CRUD 복습하기 (2) | 2024.02.15 |