From 47998b0448732586dab22771275c35f0e4ff3b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=8B=A0=EC=84=9D?= Date: Thu, 29 May 2025 23:23:11 +0900 Subject: [PATCH] axios_prac --- src/components/LoginPage.jsx | 41 ++++++++++++++++++++++++++++----- src/components/UserList.jsx | 44 ++++++++++++++++++++++++++++++++---- 2 files changed, 75 insertions(+), 10 deletions(-) diff --git a/src/components/LoginPage.jsx b/src/components/LoginPage.jsx index e3e484c..f192191 100644 --- a/src/components/LoginPage.jsx +++ b/src/components/LoginPage.jsx @@ -3,24 +3,53 @@ import axios from "axios"; import { useNavigate } from "react-router-dom"; import "../styles/LoginPage.css"; -function LoginForm() { - +function LoginPage() { + const navigate = useNavigate(); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [errorMsg, setErrorMsg] = useState(""); const handleLogin = async (e) => { e.preventDefault(); + try { + const res = await axios.post("https://reqres.in/api/login", { + email: email, + password: password, + }); - + const token = res.data.token; + localStorage.setItem("email", email); + localStorage.setItem("token", token); + + navigate("/userlist"); + } catch (err) { + setErrorMsg(err.response?.data?.error || "로그인 실패"); + console.error("로그인 에러:", err.response); + } }; return (

🔐 로그인

- - + setEmail(e.target.value)} + required + /> + setPassword(e.target.value)} + required + /> + {errorMsg &&

{errorMsg}

}
); } -export default LoginForm; +export default LoginPage; \ No newline at end of file diff --git a/src/components/UserList.jsx b/src/components/UserList.jsx index 21539fc..7590219 100644 --- a/src/components/UserList.jsx +++ b/src/components/UserList.jsx @@ -3,25 +3,61 @@ import axios from "axios"; import "../styles/UserList.css"; function UserList() { + const [users, setUsers] = useState([]); + const [email, setEmail] = useState(""); + const [token, setToken] = useState(""); + const [search, setSearch] = useState(""); + + useEffect(() => { + // 로그인한 사용자 정보 불러오기 + const storedEmail = localStorage.getItem("email"); + const storedToken = localStorage.getItem("token"); + + if (storedEmail) setEmail(storedEmail); + if (storedToken) setToken(storedToken); + + // 사용자 목록 요청 + axios.get("https://reqres.in/api/users") + .then((res) => { + setUsers(res.data.data); + }) + .catch((err) => { + console.error("유저 불러오기 실패:", err); + }); + }, []); + + // 검색 필터링 + const filteredUsers = users.filter((user) => + user.email.toLowerCase().includes(search.toLowerCase()) + ); return (
-

이메일: { }

-

토큰: { }

+

이메일: {email}

+

토큰: {token}

👥 유저 목록

setSearch(e.target.value)} />
- + {filteredUsers.map((user) => ( +
+ {user.first_name} +

{user.first_name} {user.last_name}

+

{user.email}

+
+ ))}
); } -export default UserList; +export default UserList; \ No newline at end of file