- 로그인 페이지
이번 게시물은 딱히 내용이 없어서 그냥 건너뛸까 하다가, 이 다음으로 백엔드 쪽을 들여다볼 예정이라 임시로 마무리한다는 느낌으로 작성하기로 하였다.
<Login.js>
import React, { useState } from "react";
import { useNavigate } from 'react-router-dom';
import user from "../elements/User";
import "../css/Login.css";
const Login = () => {
const [id, setId] = useState('');
const [pw, setPw] = useState('');
const navigate = useNavigate();
const checkUser = (e) => {
e.preventDefault();
const state = user.find(u => u.id === id && u.pw === pw);
if(state){
navigate(-1);
}else{
alert('아이디 또는 비밀번호를 확인해주세요.');
}
}
return (
<login>
<div className="login_wrap">
<h2>로그인</h2>
<form onSubmit={checkUser}>
<div className="login_form">
<p><input
className="login id"
type="text" name="id"
placeholder="아이디를 입력해주세요."
value={id}
onChange={(e)=>setId(e.target.value)}
/></p>
<p><input
className="login pw"
type="password" name="pw"
placeholder="비밀번호를 입력해주세요."
value={pw}
onChange={(e)=>setPw(e.target.value)}
/></p>
</div>
<div className="find_my_account">
<a href="/find_my/id">아이디 찾기</a>
<div className="separator"></div>
<a href="/find_my/pw">비밀번호 찾기</a>
</div>
<div className="login_bt_wrap">
<input className="login_bt" type="submit" value="로그인" />
<input className="sign_up" type="button" value="회원가입" />
</div>
</form>
</div>
</login>
)
}
export default Login;
//별다른 효과는 아직 없는 상태. 로그인에 성공하면 홈페이지로 이동하는게 전부이다.
//이후 백엔드 연결시에 상태업데이트가 필요하고, 쿠키나 세션에 대한 개념이 없기에 추가적인 공부나 혹은 대체법이 필요.
//구현이 어느정도 되면 로그인 상태를 이용해 다른 페이지에 영향을 미치도록 세부적인 조정이 필요하다.
다른 부분은 일단 만들어만 두고, 로그인 버튼을 눌렀을 때에 동작만 일부 구현을 해두었다.
한 컴포넌트 내부이기 때문에 useState를 이용하였고, 로그인에 성공하였을 때 useNavigate를 이용해 로그인 페이지로 들어오기 전 페이지로 이동하도록 해두었다.
참고로, useHistory는 React Router v6 이후 버전부터 useNavigate로 변경되었다. useHistory 에러가 뜨길래 한참 고민했는데, 별다른 이상이 없는데 에러가 뜬다면 버전도 한번쯤 의심해보아야겠다.
<Login.css>
.login_wrap {
padding: 0;
width: 20%;
text-align: center;
margin: 80px 40%;
}
h2 {
font-size: 18px;
padding-bottom: 30px;
}
.login_form input {
width: 100%;
height: 50px;
margin-bottom: 10px;
border: 1px solid rgb(203, 203, 203);
border-radius: 5px;
}
.login_form input[type="text"],
.login_form input[type="password"] {
text-indent: 15px;
font-weight: 600;
}
.find_my_account {
font-size: 13px;
display: flex;
justify-content: end;
margin-bottom: 20px;
}
.separator {
width: 1px;
height: 13px;
background-color: gray;
margin: 3px 5px 0 5px;
}
.login_bt_wrap input {
width: 100%;
height: 50px;
margin-bottom: 10px;
border-radius: 5px;
}
.login_bt {
color: white;
background-color: rgb(111, 0, 128);
font-weight: 600;
}
.sign_up {
color: rgb(111, 0, 128);
background-color: white;
font-weight: 600;
border: 1px solid rgb(111, 0, 128);
}
https://memo-code.tistory.com/41
마켓컬리 클론코딩 7 - node.js express 연결
프론트엔드의 가장 기본적인 부분들을 만들어놨기 때문에 이제는 DB의 연결에 도움을 줄 백엔드를 생성하려고 한다. 초기에는 java spring를 이용해서 해볼 생각도 했지만, 아직 배우지 않은 프레
memo-code.tistory.com
'기타 > 마켓컬리 클론코딩' 카테고리의 다른 글
[React/Node] 마켓컬리 클론코딩 8 - Redux 추가 (0) | 2024.04.17 |
---|---|
[React/Node] 마켓컬리 클론코딩 7 - node.js express 연결 (0) | 2024.04.02 |
[React/Node] 마켓컬리 클론코딩 5 - 리뷰 및 문의 페이지 (0) | 2024.03.28 |
[React/Node] 마켓컬리 클론코딩 4 - 상세 페이지 (0) | 2024.03.22 |
[React/Node] 마켓컬리 클론코딩 3 - 메인페이지2 (0) | 2024.03.18 |