인프런 커뮤니티 질문&답변

장산님의 프로필 이미지
장산

작성한 질문수

Slack 클론 코딩[실시간 채팅 with React]

안 읽은 메시지 개수 표시하기

안읽은메세지 표시

작성

·

427

0

안녕하세요 제로초님

mutate(0)으로 했는데도 콘솔찍어보니까 다시 1로 변합니다

channel부분만 이러네요

스크린샷 2023-05-16 오후 8.29.28.png

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

이게 결국 지금까지 내용을 종합적으로 봐야합니다. 네트워크탭에서 0으로 찍혔는데 왜 콘솔에서는 0이 나왔다가 19가 다시 나오는지를 봐야하는 거라서요.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

저 data가 뭔데요? 두 번 질문하지 않게 해주세요. ㅠ 제발 질문 올릴 때의 공지사항도 읽어주세요.

장산님의 프로필 이미지
장산
질문자

  const { data: count, mutate } = useSWR<number>( // 채팅 갯수 가져오는 api , count:n개
    userData ? `/api/workspaces/${workspace}/channels/${channel.name}/unreads?after=${date}` : null,
    fetcher,
  );

아 죄송합니다 제로초님 이 count입니다

import { IChannel, IUser } from '@typings/db';
import fetcher from '@utils/fetcher';
import React, { useEffect, VFC } from 'react';
import { useParams } from 'react-router';
import { NavLink, useLocation } from 'react-router-dom';
import useSWR from 'swr';

interface Props {
  channel: IChannel;
}
const EachChannel: VFC<Props> = ({ channel }) => {
  const { workspace } = useParams<{ workspace?: string }>();
  const location = useLocation();
  console.log('location', location.pathname);
  const { data: userData } = useSWR<IUser>('/api/users', fetcher, {
    dedupingInterval: 2000, // 2초
  });
  const date = localStorage.getItem(`${workspace}-${channel.name}`) || 0;
  const { data: count, mutate } = useSWR<number>( // 채팅 갯수 가져오는 api , count:n개
    userData ? `/api/workspaces/${workspace}/channels/${channel.name}/unreads?after=${date}` : null,
    fetcher,
  );
  console.log('count', count);

  useEffect(() => {
    //location.pathname이 `/workspace/${workspace}/channel/${channel.name}`이랑 같으면 mutate가 0으로 재캐싱된다
    if (location.pathname === `/workspace/${workspace}/channel/${channel.name}`) {
      mutate(0);
    }
  }, [mutate, location.pathname, workspace, channel]);

  return (
    <NavLink key={channel.name} activeClassName="selected" to={`/workspace/${workspace}/channel/${channel.name}`}>
      <span className={count !== undefined && count > 0 ? 'bold' : undefined}># {channel.name}</span>
      {count !== undefined && count > 0 && <span className="count">{count}</span>}
    </NavLink>
  );
};

export default EachChannel;

스크린샷 2023-05-16 오후 11.33.42.png

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

date랑 useData같은것도 같이 찍어주세요.

장산님의 프로필 이미지
장산
질문자

스크린샷 2023-05-16 오후 11.38.35.png스크린샷 2023-05-16 오후 11.38.47.png

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://github.com/ZeroCho/sleact/blob/77105b0045a20a86390be47f1ce9871d0d08a55f/front/pages/Channel/index.tsx#L134-L136C28

채널 들어갈 때 여기서 타임스탬프가 업데이트되어야 하는데요. 타임스탬프가 업데이트되고 있지 않은 것으로 보입니다. 로컬스토리지 직접 확인해보세요. 채널 들어갈 때마다 타임스탬프 올라가는지

장산님의 프로필 이미지
장산
질문자

로컬스토리지 확인결과 채널들을 누를때마다 업데이트가 되고있는것을 확인했습니다!

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

그러면 마지막으로 네트워크탭에서 unreads 요청들 response 안바뀌는지 확인해보세요. 여기서 서버에서 계산한 숫자 주거든요.

장산님의 프로필 이미지
장산
질문자

바뀝니다!

imageimageimage

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

저 unreads 들 전부 같은 채널인게 맞나요? 뭔가 서로 다른 채널인것같은 느낌인데

하나의 채널에 대해서만 봐야합니다.

장산님의 프로필 이미지
장산
질문자

일단 일반 채널 냅두고 다삭제했습니다

imageimageimage

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

dm 눌렀다가 일반채널 돌아와도 안지워지는건가요?? 저기만 리렌더링이 안되는건데...

장산님의 프로필 이미지
장산

작성한 질문수

질문하기