inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 스터디 클럽 3기 풀스택] 1주차 발자국

jomootgrn88
0

강의수강

미션

<p className="text-xs text-blue-gray-400">
  Created: ${formatDate(todo.created_at)}
</p>

 

완료한 시간을 추가하면서 개선한 점

완료한 상태에서는 completed_at 값을, 완료하지 않은 상태에서는 created_at 값을 렌더링하는 방식으로 목표 기능을 설정했다.

초기 구현에서는 completedAt 상태값을 추가하지 않고, todo-actionsupdateTodo 함수에서 updated_at 필드를 업데이트하는 방식과 동일하게 진행했다. 그리고 todo.tsx에서 completed 값이 true이면 todo.completed_at을, false이면 todo.created_at을 렌더링했다.

이 방식은 completedfalse일 때는 문제가 없었지만, false → true로 변경될 때 todo.completed_at 값이 null이라 화면이 깜빡이는 문제가 발생했다.

문제의 원인

completed는 리액트 상태값이고, todo.completed_at은 Supabase에서 가져오는 값이기 때문에 completed가 먼저 true로 변경된 후 Supabase에서 completed_at 값을 업데이트하고 가져오는 과정에서 지연이 발생했다. 그로 인해 completed_at 값이 null인 순간이 있어 깜빡임이 나타났다.

해결 방법

화면 깜빡임을 방지하려면 completed 값과 함께 completedAt 상태값을 리액트에서 관리해야 한다.

즉, checkbox의 값이 변경될 때 completedAt 상태값도 동시에 변경하고, mutatecompletedAt 값을 전달하면 completedcompletedAt 상태가 같은 타이밍에 변경된다. 이렇게 하면 Supabase 응답을 기다리는 동안에도 UI가 자연스럽게 유지될 수 있다.

프론트엔드

답변 0