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

재미있는 말미잘님의 프로필 이미지
재미있는 말미잘

작성한 질문수

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

fetcher은 정상적으로 값을 리턴하는데 useSWR의 data에 값이 들어오지 않습니다.

작성

·

266

0

1. Login.tsx

import React, { useState, useCallback, useEffect } from "react";
import * as Styled from "./style";
import { Link, Navigate } from "react-router-dom";
import axios from "axios";
import useSWR from "swr";
import fecther from "../../utils/fetcher";

function Login() {
  const { data, error, revalidate } = useSWR(
    "http://localhost:3095/api/users",
    fecther
    // {
    //   dedupingInterval: 100000,
    // }
  );

  const [info, setInfo] = useState({
    email: "",
    password: "",
  });

  const { email, password } = info;

  const onSubmit = useCallback(
    (e) => {
      e.preventDefault();

      if (!email || !password) return;

      axios
        .post(
          "http://localhost:3095/api/users/login",
          { email, password },
          {
            withCredentials: true,
          }
        )
        .then(() => {
          revalidate();
        })
        .catch(() => {
          console.log("로그인 실패");
        });
    },
    [info]
  );

  console.log(data);

  const onChange = useCallback(
    (e) => {
      const { value, name } = e.target;
      setInfo({ ...info, [name]: value });
    },
    [info]
  );

  if (data) {
    //로그인이 되어있는 경우
    return <Navigate to="/workspace/channel" />;
  }

  return (
    <Styled.LoginContainer>
      <form className="signup" onSubmit={onSubmit}>
        <header>Sleact</header>
        <label>
          <span>아이디</span>
          <input type="email" name="email" onChange={onChange}></input>
        </label>
        <label>
          <span>비밀번호</span>
          <input type="password" name="password" onChange={onChange}></input>
        </label>

        <button>로그인</button>
        <div>
          <span>아직 회원이 아니신가요?</span>
          <Link to="/signup">
            <span className="goLogin">회원가입 하러가기</span>
          </Link>
        </div>
      </form>
    </Styled.LoginContainer>
  );
}

export default Login;

 

 

 

2. fetcher

import axios from "axios";

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

export default fetcher;

 

 

3.네트워크 users 확인

 

 

커뮤니티 qna에 검색해보고 구글링을 반복해봐도 문제가 해결되지 않아 질문드립니다 ㅠㅠ

fetcher은 data를 정상적으로 리턴하는데 useSWR에는 data가 들어오지 않습니다............

 

어떤 점이 문제인지 도움을 요청해봅니다.

 

(+추가) 이것저것 시도 해보니 fetcher에 문제가 있는 것 같습니다.

then을 통해 리턴된 값이 data에 들어가지 않습니다.

하지만 then에서 res를 콘솔에 찍어보면 값이 정상적으로 출력됩니다.

정상적으로 then을 거치는 것 같은데 어떤 점이 문제일까요..

답변 1

1

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

return 빼먹으셨습니다.

혹시 어느부분 일까요..?  

fetcher 에서는 return으로 반환해보기도 했습니다...ㅠㅠ!!!!

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

return axios... 입니다

헉...이럴수가 정말 감사합니다!!!!!!!!!!!!! ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

재미있는 말미잘님의 프로필 이미지
재미있는 말미잘

작성한 질문수

질문하기