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

재미있는 여우님의 프로필 이미지
재미있는 여우

작성한 질문수

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

swr 사용하기(쿠키 공유하기)

로그인후 성공후에 swr로 요청한 user가 호출되지 않습니다

작성

·

516

0

안녕하세요!
swr 사용하기(쿠키공유하기) 강좌를 보던중에
코드를 제로초님과 분명 똑같이 작성했는데
저는 로그인 성공후에 swr에서 user를 확인하는 get 방식 api가 호출되지 않습니다 ㅠㅠ
로그인 화면 접속시에는 강좌와 같이 호출이 되는데말이죠..
몇일 고민하다 글올립니다ㅠㅠ 무엇이 문제인가요

네트워크 요청
 
Login/index.tsx
import useInput from "@hooks/useInput";
import { Success, Form, Error, Label, Input, LinkContainer, Button, Header } from "@pages/SignUp/styles";
import fetcher from "@utils/fetcher";
import axios from "axios";
import React, { useCallback, useState } from "react";
import { Link } from "react-router-dom";
import useSWR from "swr";

const LogIn = () => {
  const { data, error } = useSWR("http://localhost:3095/api/users", fetcher);
  const [logInError, setLogInError] = useState(false);
  const [email, onChangeEmail] = useInput("");
  const [password, onChangePassword] = useInput("");
  const onSubmit = useCallback(
    (e) => {
      e.preventDefault();
      setLogInError(false);
      axios
        .post("http://localhost:3095/api/users/login", { email, password })
        .then(() => {})
        .catch((error) => {
          setLogInError(error.response?.data?.statusCode === 401);
        });
    },
    [email, password],
  );

  return (
    <div id="container">
      <Header>Sleact</Header>
      <Form onSubmit={onSubmit}>
        <Label id="email-label">
          <span>이메일 주소</span>
          <div>
            <Input type="email" id="email" name="email" value={email} onChange={onChangeEmail} />
          </div>
        </Label>
        <Label id="password-label">
          <span>비밀번호</span>
          <div>
            <Input type="password" id="password" name="password" value={password} onChange={onChangePassword} />
          </div>
          {logInError && <Error>이메일과 비밀번호 조합이 일치하지 않습니다.</Error>}
        </Label>
        <Button type="submit">로그인</Button>
      </Form>
      <LinkContainer>
        아직 회원이 아니신가요?&nbsp;
        <Link to="/signup">회원가입 하러가기</Link>
      </LinkContainer>
    </div>
  );
};

export default LogIn;

 

fetcher.ts

import axios from "axios";

const fetcher = (url: string) => axios.get(url).then((response) => response.data);

export default fetcher;

답변 2

0

위에 적어주신 부분 mutate()는 왜해주는 것인지 알 수 있을까용? 

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

로그인 후에 사용자데이터를 갱신요청하는 겁니다.

0

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

login 부분에서 axios then 부분이 비어있어서 그런 건데요. 코드 작성이 안 되었습니다.

답변감사합니다

하지만 아래 캡쳐사진 보면 제로초님도 then부분이 비어있는 상태인데 결과화면에서 호출이 됐었습니다
제가 swr설치한 버전이 1.1.2인데 업그레이드 되면서 뭔가바뀐걸까요?

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

const { data, error, mutate } = useSWR("http://localhost:3095/api/users", fetcher);

then(() => mutate()) 이렇게 해보세요.
재미있는 여우님의 프로필 이미지
재미있는 여우

작성한 질문수

질문하기