next.js에서 로컬스토리지를 사용할 때
158
작성한 질문수 2
안녕하세요! 이정환 강사님.
next 강의를 거의 다 수강해가는 것 같아서 배운걸 활용해 혼자 간단한 투두리스트를 구현해보고 있는데요.
새로고침 시에도 할일목록이 유지되도록 하기 위해 로컬스토리지에 저장된 목록을 가져오고
또 저장하는 로직을 작성하였더니
ReferenceError: localStorage is not defined
이와 같은 오류를 만나서 useEffect를 사용해서 아래와 같이 작성하였습니다.
// useTodo 커스텀 훅 일부
const [todoList, setTodoList] = useState<Todo[]>([]);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const storedTodos = getStoredTodoFromLocalStorage();
setTodoList(storedTodos);
setIsLoading(false);
}, []);
useEffect(() => {
if (todoList.length > 0) saveTodoToLocalStorage(todoList);
}, [todoList]);
// ToDoItemList.tsx
export default function ToDoItemList({
isLoading,
todoList,
toggleTodoCompletion,
}: ToDoItemListProps) {
if (isLoading) {
return <S.ToDoItemList>로딩중...</S.ToDoItemList>;
}
if (todoList.length === 0)
return (
<S.ToDoItemList>
<S.EmptyList>할일을 생성해보세요✨</S.EmptyList>
</S.ToDoItemList>
);
return (
<S.ToDoItemList>
{todoList.map(todo => (
<ToDoItem
key={todo.id}
todo={todo}
toggleCompletion={toggleTodoCompletion}
/>
))}
</S.ToDoItemList>
);
}처음엔 로딩상태를 만들지 않고 todolist.length가 0이면 "할일을 생성해보세요"가 보이고
아니면 할일 목록을 보여주도록 했습니다.
하지만 그렇게 하니까 할일 목록을 작성하고 새로고침을 누르면 "할일을 생성해보세요"가 잠깐 나타나고
기존에 작성한 할일 목록이 나타나더라구요...
그래서 로딩중을 추가했는데 이제는 이 투두리스트에 처음 접근한 사람도 아직 아무 데이터도 없는데
로딩중이 보이고 할일을 생성해보세요가 나타나게 되는 문제에 직면했습니다.
이러한 로직은 어떻게 다루어야 좋을까요??
제가 의도했던 건
처음 투두리스트 작성하려는 유저에겐 "할일을 생성해보세요"가 바로 보이고, 할일을 작성하면 할일목록을,
새로고침을 해도 할일목록을 보여주기
이전에 작성한 투두리스트가 있는 유저에겐 할일 목록을 보여주고 새로고침을 해도 그대로 유지해서 보여주기
인데 어떻게 해결할 수 있을지 모르겠습니다...🥲
답변 1
1
안녕하세요 이정환입니다.
보통 이런 문제는 로딩을 통해 해결합니다. 로딩을 추가하신 이후 "로딩중"이 먼저 보이고 그 뒤에 "할일을 추가하세요"가 보인다고 하셨는데 이는 크게 어색하지 않은 동작으로 보입니다. 데이터를 로딩해보고 난 뒤가 되어서야 데이터가 있는지 없는지 판단을 할 수 있으니까요😃
또는 로딩중 텍스트의 UI가 그닥 마음에 들지 않으신다면 Skeleton을 활용해보시는것도 방법이 될 수 있을 것 같습니다. 아니면 아예 페이지 전체에 로딩을 거는 방법도 있습니다.
풀라우트캐시 동작 원리에서 데이터 캐시 관련 질문
0
53
2
next.js 프로젝트
0
50
1
Next.js + Tanstack Query BFF 구조 질문
0
47
2
Next.js 사전렌더링 이해하기 부분
0
52
2
모달 관련 질문
0
56
3
렌더링 관련 질문
0
92
2
중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화
0
78
2
라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.
0
76
2
SSR시 context에 params말고 query를 사용하면 안되나요?
0
90
2
npx prisma db push 시 에러가 뜹니다.
0
107
3
vercel 배포를 실패하였습니다.
0
120
3
Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?
0
74
2
getServerSideProps 함수와 SSR의 관계
0
87
6
없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다
0
70
2
실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.
0
124
2
일반적인 nextjs project architecture에 대하여..
0
97
2
2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?
0
82
2
배포 시 오류 발생
0
97
2
백엔드 서버 오류납니다.
0
95
2
취약점 제거시 nestjs 버전 문제가 생길까요?
0
102
1
eslint.config.mjs 내 rules 어떻게 설정 하나요?
0
113
1
[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.
0
69
2
빨간줄 설정
0
88
2
익스텐션 질문
0
65
1





