// 아이디와 비밀번호 입력 부분 기능 구현을 위한 useState 사용 const [inputId, setInputId] = useState(''); const [inputPw, setInputPassword] = useState(''); // 아이디와 비밀번호 입력 이벤트 발생 시 실행되는 함수 const handleIdInput = e => { setInputId(e.target.value); }; const handlePwInput = e => { setInputPassword(e.target.value); }; const navigate = useNavigate(); const goToSignUp = e => { e.preventDefault(); fetch('http://10.58.2.60:8000/user/login', { method: 'POST', body: JSON.stringify({ email: inputId, password: inputPw, }), }) .then(res => res.json()) .then(result => { if (result.Token) { localStorage.setItem('Token', result.Token); } else { alert('로그인 실패!'); } }); navigate('/'); }; // 백엔드와의 통신을 위해 fetch 함수를 만들고 로그인 버튼 활성화(유효성 검사 완료)되면 버튼 클릭 시 웹페이지의 main(navigate('/'))으로 이동. // 로그인 실패 시 '로그인 실패'라는 경고창 띄움 // **fetch 함수에서 email과 password 부분의 key값은 백엔드 데이터 부분의 key값과 동일해야함**
idCondition
에 '@', '.' 두 가지를 포함한 정규표현식을 선언하고 pwCondition
에 숫자,문자,특수문자를 포함한 정규표현식을 선언함.true
여야 함. ✨그러던 중 test
메소드를 발견해서 유효성 검사에 대한 코드를 금방 짤 수 있었다!!
(*test
메소드 설명)
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
입력한 ID가 true인지 false인지 판별하는 식을 만들고
( const isValidId = idCondition.test(inputId)
)
입력한 PW가 true인지 false인지 판별하는 식을 만든다!
(const isValidPw = pwCondition.test(inputPw)
)
&&
연산자를 활용하여 ID,PW부분이 true이면 로그인 버튼의 disabled
값이 실행됨{!valid}
input
태그들을 form
태그로 묶어놨기 때문에 새로고침 되는 동작을 막기 위해 e.preventDefault();
메소드를 사용했다.
그리고 ID와 PW 부분에 onChange
이벤트 핸들러를 사용하였다.
const goSignUp = e => { fetch('http://10.58.2.60:8000/user/signup', { method: 'POST', body: JSON.stringify({ email: email, name: name, password: password, phoneNumber: numberInputValue, birth: birthInputValue, agreement: { agreement: agreement, }, }), }) .then(res => { res.json(); }) .then(result => {}); navigate('/'); };
state
의 기본값을 false로 설정해둠agreement: {agreement: agreement}
를 fetch 함수안에 입력왜 때문일까...? 로그인 페이지의 아이디와 비밀번호 유효성 검사 코드가 회원가입 페이지에선 적용이 안될까..?
정말..알수가 없었다...그래서 결국 다른 방안으로 비밀번호 부분은 정규표현식으로 하되, 아이디에는 includes
메소드를 사용해서 '@', '.' 이 두 가지가 있는지 확인하는 식을 만들었다.
그리고 checkbox
부분에서는 (1)전체동의 또는 (2)필수 2가지 선택 시
위 조건들에 부합하면 버튼이 활성화되게끔 로직을 짰다.
onChange
메소드를 하이픈 자동생성 하는데에 맞췄기 때문에 map
메소드를 사용할 수가 없었다.component
를 만들어서 map
메소드를 사용했음.handleInput
함수를 선언-> 함수가 호출될 때마다 inputValue를 setInputValue로 업데이트함.onChange
메소드에 handleInput
함수를 입력했는데 당최 실행이 안돼서 며칠간 애를 먹었다.onChange={onChange}
로 수정했는데 기능 구현이 넘나 잘되는것...! 오타정도의 실수라고 위로해주셔서 너무 감사했습니다😭😭replace
메소드를 사용하였다.handlepress
함수가 호출될 때마다 numberInputValue
를 setNumberInputValue
해서 업데이트한다.
checkbox
가 4가지여서 state를 4개로 분류했다.checkbox
에 아무것도 체크가 안되어있어야 하기 때문에 초기값은 false.checkbox
에 대한 함수를 4가지고 나눠서 선언했다.