위 gif를 한번 확인해 보세요.
const [items, setItems] = useState([]);
const handleDelete = (id) => {
const nextItems = items.filter((item) => item.id !== id);
setItems(nextItems);
};
const handleLoad = async (options) => {
const { reviews, paging } = await getReviews(options);
if (options.offset === 0) {
setItems(reviews);
} else {
setItems([...items, ...reviews]);
}
setOffset(options.offset + reviews.length);
setHasNext(paging.hasNext);
};
await getReviews(options);
가 완전히 실행되기 이전에 삭제가 진행되었으니까
handleLoad
에는 기본적으로 삭제 이전의 items값이 저장되어 있다 보면 된다.
그래서 버그가 생기는 것이다!
setItems((prevItems) => [...prevItems, ...reviews]);
이전 state 값을 받아서 콜백으로 넘겨주면 간단하게 해결된다.