• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

게시글 작성시 post.id를 읽지 못 하는 문제가 있습니다.

23.07.18 17:34 작성 조회수 255

0

안녕하세요, 제로초님. 문제에 대한 고민을 공유하기 앞서 현재 저는 [해시태그 등록하기]까지 수강한 상태입니다.

공유하려는 문제는 제목과 같이 게시글 작성시 post.id를 읽지 못 하여 컴포넌트가 렌더링 되지 않습니다. 그러나 새로고침을 하면 작성한 게시글이 정상적으로 렌더링됩니다.

네트워크와 redux 데브툴즈에는 액션들이 모두 정상적으로 작동하고 있음을 확인하였고, 콘솔을 확인해보니 아래와 같은 오류가 뜹니다.

스크린샷 2023-07-18 오후 5.20.49.png스크린샷 2023-07-18 오후 4.50.29.png

위 오류는 비동기로 데이터를 받아오기 전에 먼저 render가 되서 발생하는 에러임을 검색을 통해 확인하였습니다. 그래서 react suspense를 이용하여 해결해보려 했으나 해결하지 못 했습니다.

혹시 제가 해당 오류의 원인을 제대로 파악하지 못 하고 있는 걸까요? 알려주시면 감사하겠습니다.

답변 2

·

답변을 작성해보세요.

0

윤섭님의 프로필

윤섭

질문자

2023.07.18

해당 문제는 아래와 같이 filter()를 사용해 거른 출력값을 다시 map()을 사용하여 렌더링 되도록 해결했습니다.

//before
{mainPosts.map((post) => (
  <PostCard key={post.id} post={post} />
))}

//after
{mainPosts.filter(Boolean).map((post) => (
  <PostCard key={post.id} post={post} />
))}

이렇게 작성하면 undefined가 포함되지 않은 배열이 출력될 것이라고 예상했습니다만, 여전히 콘솔에는 해결되기 전과 동일하게 출력됩니다.

문제는 해결됐지만 예상한 것과 달라 신경이 쓰입니다. 제가 접근한 방식이 틀린 것인지, 틀린 것이라면 어떻게 접근하여 문제를 해결해야 하는지 궁금합니다.

또한 위 해결방법에서 왜 이전과 동일하게 출력값이 뜨는건지도 궁금합니다.

출력값이 동일한 이유는 slice 함수의 역할에 대해서 생각해보세요.

애초에 mainPosts에 처음부터 undefined가 안 들어가게 하는 것이 중요합니다. filter는 소잃고 외양간 고치는 격일 뿐입니다.

 

0

먼저 렌더링될리가 없습니다. 왜냐하면 mainPosts의 개수가 늘어나야 postCard가 렌더링되는데 mainPosts의 개수는 데이터가 불러와진 후에 늘어나기 때문입니다. mainPosts에 undefined가 들어가고 있는건 아닌지 리덕스 데브툴로 검사해보세요.

윤섭님의 프로필

윤섭

질문자

2023.07.18

데브툴을 보니 undefined의 흔적은 없었습니다. request와 success의 state 값을 비교했을 때 기존값들이 밀려나면서 0번째 인덱스에 정상적으로 게시글이 추가된 것을 확인했습니다.

console.log('mainPosts', mainPosts.slice()) 한 뒤에 배열 확인해보세요.

윤섭님의 프로필

윤섭

질문자

2023.07.18

콘솔로 확인해보니 비어있는 리스트에 undefined가 있음 확인했습니다. 데브툴에선 null이라고 떠서 무심코 넘겼는데 null도 undefined로 뜰 수 있음을 잊었습니다.

스크린샷 2023-07-18 오후 6.09.08.png

해당 부분들은 초기 렌더시엔 없었는데 왜 작성시에는 포함되는 건가요?

코드를 모르니까 저도 모르죠;; ㅎㅎㅎ 어디선가 undefined가 들어갔을테니 그걸 추적하셔야 합니다.

윤섭님의 프로필

윤섭

질문자

2023.07.18

이전과 같이 동일한 출력값이 뜨는건 말씀해주신대로 어디선가 undefined가 들어가서 여전히 같은 출력값을 띄우는 것이겠네요. 감사합니다. 알려주신 부분을 좀 더 찾아서 해결해보겠습니다!