작성한 질문수
Slack 클론 코딩[실시간 채팅 with React]
안 읽은 메시지 개수 표시하기
작성
·
427
0
안녕하세요 제로초님
mutate(0)으로 했는데도 콘솔찍어보니까 다시 1로 변합니다
channel부분만 이러네요
답변 2
이게 결국 지금까지 내용을 종합적으로 봐야합니다. 네트워크탭에서 0으로 찍혔는데 왜 콘솔에서는 0이 나왔다가 19가 다시 나오는지를 봐야하는 거라서요.
저 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;
date랑 useData같은것도 같이 찍어주세요.
넵
https://github.com/ZeroCho/sleact/blob/77105b0045a20a86390be47f1ce9871d0d08a55f/front/pages/Channel/index.tsx#L134-L136C28
채널 들어갈 때 여기서 타임스탬프가 업데이트되어야 하는데요. 타임스탬프가 업데이트되고 있지 않은 것으로 보입니다. 로컬스토리지 직접 확인해보세요. 채널 들어갈 때마다 타임스탬프 올라가는지
로컬스토리지 확인결과 채널들을 누를때마다 업데이트가 되고있는것을 확인했습니다!
그러면 마지막으로 네트워크탭에서 unreads 요청들 response 안바뀌는지 확인해보세요. 여기서 서버에서 계산한 숫자 주거든요.
바뀝니다!
저 unreads 들 전부 같은 채널인게 맞나요? 뭔가 서로 다른 채널인것같은 느낌인데
하나의 채널에 대해서만 봐야합니다.
일단 일반 채널 냅두고 다삭제했습니다
dm 눌렀다가 일반채널 돌아와도 안지워지는건가요?? 저기만 리렌더링이 안되는건데...
아 죄송합니다 제로초님 이 count입니다