inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

모달 만들기

Workspaces.map 함수가 제대로 작동하지 않습니다 ㅠ

해결된 질문

570

Nuri Park

작성한 질문수 16

0

워크스페이스에서 user정보들이 전부 불러오지 않고..

하나씩만 담겨져서 보여집니다 ㅠㅠ

아무리 찾아봐도 해결을 하지못해서 글을 남깁니다.

프록시는 설정되어있습니다.

무엇이 문제일까요..

 

Workspace 코드입니다.

import {
  Channels,
  Chats,
  Header,
  ProfileImg,
  RightMenu,
  WorkspaceWrapper,
  WorkspaceName,
  MenuScroll,
  Workspaces,
  ProfileModal,
  LogOutButton,
  WorkspaceButton,
  AddButton,
} from '@layouts/Workspace/styles';
import React, { FC, useCallback, useState } from 'react';

import useSWR from 'swr';
import fetcher from '@utils/fetcher';
import axios from 'axios';

import Menu from '@components/Menu';
import Modal from '@components/Modal';

import { IUser } from '@typings/db';

import { Redirect, Switch, Route, Link } from 'react-router-dom';
import loadable from '@loadable/component';

import gravatar from 'gravatar';

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

const Workspace: FC = ({ children }) => {
  const [showUserMenu, setShowUserMenu] = useState(false);

  const {
    data: userData,
    error,
    mutate,
  } = useSWR<IUser | false>('/api/users', fetcher, {
    dedupingInterval: 2000,
  });

  const onLogOut = useCallback(() => {
    axios
      .post('/api/users/logout', null, {
        withCredentials: true,
      })
      .then(() => {
        mutate();
      });
  }, []);

  const onClickUserProfile = useCallback(() => {
    setShowUserMenu((prev) => !prev);
  }, []); // 토글 함수

  if (!userData) {
    return <Redirect to="/login" />;
  }

  return (
    <div>
      <Header>
        <RightMenu>
          <span onClick={onClickUserProfile}>
            <ProfileImg src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} />
            {showUserMenu && (
              <Menu style={{ right: 0, top: 38 }} show={showUserMenu} onCloseModal={onClickUserProfile}>
                <ProfileModal>
                  <img src={gravatar.url(userData.email, { s: '36px', d: 'retro' })} alt={userData.nickname} />
                  <div>
                    <span id="profile-name">{userData.nickname}</span>
                    <span id="profile-active">Active</span>
                  </div>
                </ProfileModal>
                <LogOutButton onClick={onLogOut}>로그아웃</LogOutButton>
              </Menu>
            )}
          </span>
        </RightMenu>
      </Header>
      <WorkspaceWrapper>
        <Workspaces>
          {userData?.Workspaces.map((ws) => {
            return (
              <Link key={ws.id} to={`/workspace/${1234}/channel/일반`}>
                <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()}</WorkspaceButton>
              </Link>
            );
          })}
          {/* <AddButton onClick={onClickCreateWorkspace}>+</AddButton> */}
        </Workspaces>
        <Channels>
          <WorkspaceName>Sleact</WorkspaceName>
          <MenuScroll>menuscroll</MenuScroll>
        </Channels>
        <Chats>
          <Switch>
            <Route path="/workspace/channel" component={Channel} />
            <Route path="/workspace/dm" component={DirectMessage} />
          </Switch>
        </Chats>
      </WorkspaceWrapper>
    </div>
  );
};

export default Workspace;

 

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

답변 1

1

제로초(조현영)

지금 user 요청에서는 워크스페이스 사용자가 여러명 나와야할 이유가 없습니다. 워크스페이스 멤버 불러오는 라우터가 따로 있습니다.

0

Nuri Park

지금 부분 코드의 강의영상에서는 여러개의 사용자가 나오던데.. 예시일까요?

1

제로초(조현영)

여러 개의 사용자가 아니라 여러 개의 워크스페이스를 잘못 보신 것 아닌가요?

0

Nuri Park

아 네네 사용자말고 여러개의 워크스페이스요!

0

Nuri Park

한꺼번에 불러와지는건줄알았는데 아닌거군요! 주말에 늦은시간까지 빠른 피드백 주셔서 너무 감사합니다!

1

제로초(조현영)

워크스페이스는 여러 군데 들어있으면 여러 개가 불러와져야하는게 맞습니다. 지금까지는 사용자라고 말씀하셔서요

0

Nuri Park

네! 제가 단어를 잘못 선택하여 질문했네요ㅠㅠ

워크스페이스를 추가하니 여러개가 나열됩니다.

덕분에 해결되었습니다. 감사합니다~~!!

기본 셋팅과 관련하여

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

298

2

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

0

990

2

alias 경로 설정 오류

0

452

2

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

0

278

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