TodoList 만들기 2
2024. 7. 18. 18:05ㆍSpringboot-React
Login.js
import React, { useContext, useState } from 'react';
import TodoListContext from './TodoListContext';
const Login = () => {
const { loginMember, setLoginMember, setTodoList } = useContext(TodoListContext);
const [id, setId] = useState('');
const [pw, setPw] = useState('');
const login = () => {
fetch('/login', {
method : "POST",
headers : {"Content-Type" : "application/json",
"Accept" : "application/json" },
body : JSON.stringify({id : id, pw : pw})
})
.then(resp => resp.json())
.then(map => {
console.log(map);
// 로그인 실패 시
if(map.loginMember === null){
alert('아이디 또는 비밀번호가 일치하지 않습니다');
return;
}
// 로그인 성공 시
setLoginMember(map.loginMember);
setTodoList(map.todoList);
setId('');
setPw('');
})
}
const logout = () => { setLoginMember(null); }
return (
<div className="login-container">
<table>
<tbody>
<tr>
<th>ID</th>
<td>
<input type="text" onChange={e => setId(e.target.value)} value={id} />
</td>
</tr>
<tr>
<th>PW</th>
<td>
<input type="password" onChange={e => setPw(e.target.value)} value={pw} />
</td>
<td>
<button onClick={login} >Login</button>
</td>
</tr>
</tbody>
</table>
{loginMember && (
<button onClick={logout}>로그아웃</button>
)}
</div>
);
}
export default Login;
SignUp.js
import React, {useState} from "react";
const SignUp = () => {
const [id, setId] = useState('');
const [pw, setPw] = useState('');
const [pwCheck, setPwCheck] = useState('');
const [name, setName] = useState('');
const [result, setResult] = useState('');
//아이디 중복검사
const [idValidation, setIdValidation] = useState(false);
//중복검사 이벤트 핸들러
const idDup = (eventId) => {
setId(eventId);
//입력된 아이디가 4글자 미만일 경우
if(eventId.trim().length < 4){
setIdValidation(false);
return;
}
fetch("/idCheck?id=" + eventId)
.then(response => response.text())
.then(result => {
if(Number(result) === 0){
setIdValidation(true);
}
else{
setIdValidation(false);
}
})
}
const signUpBtn = () => {
if(!idValidation){
alert('유효한 아이디가 아닙니다.');
return;
}
if(pw !== pwCheck){
alert('비밀번호와 비밀번호 확인이 일치하지 않습니다.');
return;
}
const inputValues = {};
inputValues.id = id;
inputValues.pw = pw;
inputValues.name = name;
fetch("/signup", {
method: "POST",
headers: {"Content-Type" : "application/json"},
body: JSON.stringify(inputValues)
})
.then(response => response.text())
.then(result => {
if(Number(result) > 0){
setResult('회원 가입 성공');
setId('');
setPw('');
setPwCheck('');
setName('');
}
else{
setResult('회원 가입 실패');
}
})
.catch(error => {
console.error('There was a problem with your fetch operation:', error);
});
}
return(
<div className="signup-container">
{/* label의 htmlFor와 input의 id를 생략하고 싶다면 input을 라벨 안에 작성해주면 됨 */}
<label>
ID :
<input type="text" onChange={e => idDup(e.target.value)}
value={id}
className={idValidation ? '' : 'id-err'}
/>
</label>
<label>
PW :
<input type="password" onChange={e => setPw(e.target.value)}
value={pw}
/>
</label>
<label>
PW CHECK :
<input type="password" onChange={e => setPwCheck(e.target.value)}
value={pwCheck}
/>
</label>
<label>
NAME :
<input type="text" onChange={e => setName(e.target.value)}
value={name}
/>
</label>
<button onClick={signUpBtn}>가입하기</button>
<hr/>
{/* 회원가입 결과 출력 */}
<h3>{result}</h3>
</div>
)
}
export default SignUp;
'Springboot-React' 카테고리의 다른 글
tosspay구현하기 3 (springboot) (0) | 2024.07.24 |
---|---|
tosspay구현하기 2 (springboot) (0) | 2024.07.24 |
tosspay 구현하기 1 (react) (0) | 2024.07.24 |
TodoList 만들기 3 (0) | 2024.07.18 |
TodoList 만들기 1 (0) | 2024.07.17 |