inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

workspace의 userData를 출력하면 undefined출력 이후 값이 나오는 현상

375

TaeIl Lee

작성한 질문수 3

0

import { Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceName, Workspaces, WorkspaceWrapper } from '@layouts/Workspace/styles'
import fetcher from '@utils/fetcher';
import React, { useCallback, useState } from 'react';
import useSWR from 'swr';
import axios from 'axios'
import gravatar from 'gravatar'
import { IUser } from '@typings/db';
import { Navigate, Route, Routes } from 'react-router';
import loadable from '@loadable/component';
import Menu from '@components/Menu';

const Channel = loadable(() => import('@pages/Ch'));
const DirectMessage = loadable(() => import('@pages/DirectMessage'));



const Workspace = () => {
 
    const [showUserMenu, setShowUserMenu] = useState(false);
  
    const { data: userData, error, mutate } = useSWR<any>('/api/users', fetcher, {
        dedupingInterval: 2000,
    });
    console.log(">>" + userData)

    const onLogout = useCallback(() => {
        console.log(userData)
        axios.post(
            '/api/users/logout', null, { withCredentials: true, })
            .then(() => {
                mutate(false, false);
                // revalidateUser(false);
            })
            .catch((err) => {
                console.log(err)
            })
    }, [])

    const onClickUserProfile = useCallback(() => {
       
        setShowUserMenu((prev) => !prev);
    }, [])

    if (userData === false) {
        return <Routes><Route path="/*" element={<Navigate replace to="/login" />} /></Routes>
    }

    return (
        <div>
            <Header>
                <RightMenu>
                    <span onClick={onClickUserProfile}>
                        
                        {/* {gravatar.url(userData.email, { s: '28px', d: 'retro' })} */}
                        <ProfileImg src="" alt="" />
                        {/* toggle */}
                        {showUserMenu && (<Menu style={{ right: 0, top: 38 }} show={showUserMenu} onCloseModal={onClickUserProfile}>
                            <ProfileModal>
                                
                                <img src="" alt="" />
                                <div>
                                    {/* <span id="profile-name">{userData.nickame}</span> */}
                                    <span id="profile-name">name</span>
                                    <span id="profile-active">Active</span>
                                </div>
                            </ProfileModal>
                            <LogOutButton onClick={onLogout}>로그아웃</LogOutButton>
                        </Menu>
                        )}
                    </span>
                </RightMenu>
            </Header>
            <WorkspaceWrapper>
                <Workspaces>te</Workspaces>
                <Channels>
                    <WorkspaceName>Sleact</WorkspaceName>
                    <MenuScroll>Menu Scroll</MenuScroll>
                </Channels>
                <Chats>
                    <Routes>
                        <Route path='/workspace/channel' element={<Channel />} />
                        <Route path='/workspace/dm' element={<DirectMessage />} />
                    </Routes>
                </Chats>
            </WorkspaceWrapper>
            {/* {children} */}
        </div>
    )
}

export default Workspace;

workspace

import axios from 'axios';

const fetcher = (url: string) =>
  axios
    .get(url, {
      withCredentials: true,
    })
    .then((response) => response.data);

export default fetcher;

fetcher.ts

 

 

Workspace에서 콘솔로 userData를 찍으면 undefined가 나온 뒤 값이 출력 되는데 먼저 뜨는 undefined때문에 에러가 나서 gravatar아이콘을 못 넣고 있습니다.

(창이 처음 뜰 때만 undefined가 1회 나온 뒤 값이 출력 되고 이후에는 계속 undefined없이 값만 정상 출력 됩니다.)

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

답변 2

0

TaeIl Lee

imageimage

imageimageimage

이렇게 올리면 될까요?

0

제로초(조현영)

아, 위에 undefined 뜨던 건 로딩입니다.

if (userData === undefined) return null;

하나 넣으시면 됩니다.

0

TaeIl Lee

감사합니다!!

0

제로초(조현영)

image여기에서 위에 users도 보여주셔야 하고, 헤더 부분의 request header의 cookie가 서로 다른지도 보여주셔야 할 것 같습니다.

0

TaeIl Lee

올렸습니다!

기본 셋팅과 관련하여

0

93

1

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

0

98

2

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

0

150

2

useEffect 개수 관리

0

111

2

라이브러리 서치 방법

0

105

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

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

0

146

2

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

1

179

2

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

0

157

2

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

0

432

3

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

0

598

2

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

0

959

1

배포 방법

0

299

2

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

0

994

2

alias 경로 설정 오류

0

453

2

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

0

278

1

제네릭 질문

0

219

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

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

0

386

2

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

0

336

1

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

0

247

2