작성
·
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을 거치는 것 같은데 어떤 점이 문제일까요..
혹시 어느부분 일까요..?
fetcher 에서는 return으로 반환해보기도 했습니다...ㅠㅠ!!!!