inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

워크스페이스 만들기(gravatar)

제로초님! Worksapce/channel 에서 새로고침 시, data가 undefined가 되는 문제 질문드립니다~!

255

작성자 없음

작성한 질문수 0

0

안녕하세요 제로초님! 그라바타 적용하다가 data.email 이 새로고침 시에 오류가 나서 질문 드립니다.!!!

먼저, 오류나 경고 메시지들 보고 라우터 문제인가 싶어서 (라우터 v6 사용 중입니다. ) 라우터 관련해서만 구글링 하다가,

data.email가 아닌 data만 사용하면 새로고침 시에도 문제 없다는 걸 알았는데요..

data를 콘솔로 찍어보니 두번 출력이 되면서,

 첫번째는 undefined로 나오고 두번째는 정상으로 나오는데data가 undefinde일 때 랜더링이 되서 그런 건가?? 하는

생각이 들긴했는데 이게 왜 저렇게 되는 건지 navigate로 페이지 이동되면서 저렇게 되는 건지 

data가 언디파인드 인데도 login으로 페이지도 안넘어가는 상황입니다

에러 원인에 대한 판단이 잘 안서서 해결을 못하고 있습니다ㅠㅠ 

혹시 해결 방향을 잡아주실 수 있을까요???

< 컴포넌트에서 data.email이 사용될 때 새로고침 >

< data만 사용할 때 새로고침 >

 

제 코드 입니다!

import axios from "axios";
import React, { FC, useCallback, useEffect } from "react";
import { useNavigate } from "react-router";
import useSWR from "swr";
import fetcher from "@src/utils/fetcher";
import {
  Channels,
  Chats,
  Header,
  MenuScroll,
  ProfileImg,
  RightMenu,
  WorkspaceName,
  Workspaces,
  WorkspaceWrapper,
} from "./style";
import gravatar from "gravatar";

const Workspace: FC = ({ children }) => {
  const { data, error, mutate } = useSWR(
    "http://localhost:3095/api/users",
    fetcher,
    {
      dedupingInterval: 100000,
      loadingTimeout: 900000,
    }
  );

  const onLogout = useCallback(() => {
    axios
      .post("http://localhost:3095/api/users/logout", null, {
        withCredentials: true,
      })
      .then(() => mutate(false, false));
  }, []);

  const navigate = useNavigate();

  if (!data || data === undefined) {
    navigate("/login");
  }

  console.log("@@@data", data);

  return (
    <>
      <Header>
        <RightMenu>
          <span>
            {/* <ProfileImg
              src={gravatar.url(data, { s: "28px", d: "retro" })}
              alt={data}
            ></ProfileImg> */}
          </span>
        </RightMenu>
      </Header>
      <button onClick={onLogout}>로그아웃</button>
      <WorkspaceWrapper>
        <Workspaces>test</Workspaces>
        <Channels>
          <WorkspaceName>Clone</WorkspaceName>
          <MenuScroll>MenuScroll</MenuScroll>
        </Channels>
        <Chats>Chats</Chats>
      </WorkspaceWrapper>
      {children}
    </>
  );
};

export default Workspace;

Socket.io typescript react 웹팩 babel 클론코딩

답변 1

1

제로초(조현영)

navigate login 다음에 return 넣으셔야 합니다. 안 그러면 밑에 jsx까지 실행됩니다.

0

DOM

허허...해결되었습니다... 감사합니다ㅠ_ㅠ!!!

0

도토잠보

글쓴이는 아니지만 질문하나 드리고자 합니다.

저도 글쓴이와 같이 data를 콘솔로 출력하여 보면 undefined와 동시에 로그인 data도 출력이 되는데여, 이러한 현상이 자연스러운건가요 ?
그리고 어째서 두번 렌더링 되는건가요 ?

1

제로초(조현영)

데에터 로딩중일때는 undefined입니다.

기본 셋팅과 관련하여

0

92

1

초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법

0

96

2

focus 시에만 화면 업데이트 되는 이유 + 해결방법

0

150

2

useEffect 개수 관리

0

110

2

라이브러리 서치 방법

0

104

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)

0

144

2

사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')

1

178

2

초기세팅중 packge.json 에러떠요

0

156

2

CORS - Access-Control-Allow-Origin 누락 문제

0

431

3

로그인 페이지 무한 새로고침 현상

0

598

2

Module not found: Error: Can't resolve './App' 에러

0

959

1

배포 방법

0

297

2

npm run dev 시 빌드가 매우 느려졌습니다

0

990

2

alias 경로 설정 오류

0

451

2

fetcher 함수의 data 값이 두번 찍히는 이유

0

277

1

제네릭 질문

0

218

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.

0

385

2

[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.

0

336

1

users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.

0

247

2