// ./src/routes/Auth.jsconst Auuth = () => {
return<div><form><inputtype="email"placeholder="Email"required /><inputtype="password"placeholder="Password"required /><inputtype="submit"value="Log In" /></form><div><button>Continue with Google</button><button>Continue with Github</button></div></div>
}
exportdefault Auth
코드 작성 후 화면을 확인해보면 <Continue with Google> 과 <Continue with Github> 버튼이 만들어집니다.
위에 버튼 두 개는 구글, 깃허브 소셜 로그인을 담당하고 구글, 깃허브 소셜 로그인은 파이어베이스 서버에 요청만 하면 되므로 서버 호출을 할 수 있게 버튼을 만듭니다.
이메일, 비밀번호 로그인의 경우 이메일과 비밀번호를 입력 받아야 하므로 form 엘리먼트와 input 엘리먼트를 사용합니다.
폼 데이터가 서버로 제출되기 전에 이메일과 비밀번호는 반드시 채워져 있어야 하므로 <input> 태그의 required 속성을 입력합니다. => required 속성은 boolean 속성입니다. 해당 속성을 명시하지 않으면 속성값이 자동으로 false 값을 가지게 되며, 명시하면 자동으로 true 값을 가지게 됩니다.
2. 로그인 폼이 상태를 업데이트하도록 만들기
리액트에서 input 엘리먼트를 관라하고 form 엘리먼트가 실행되도록 만드려면 useState 함수로 상태를 만들어 주고 handleLogInInput, handleLogInSubmit 함수로 이벤트를 연결합니다.
handleLogInInput 함수에서 e.target.name을 출력하게 되어 있습니다.
각각의 input 엘리먼트를 마우스로 눌러 키보드 입력을 시도 하면 로그인 폼 자체에 텍스트가 입력되지 않고 input 엘리먼트의 name 속성에 지정한 값이 콘솔에 출력됩니다. => handleLogInInput 함수에서 e.target.name으로 어떤 input 엘리먼트에서 입력을 시도하고 있는지 구분할수 있습니다.
input 엘리먼트에서 email 입력과 password 입력을 구분하기 위해 2가지 함수를 만드는 것보다 e.target.name 으로 input 엘리먼트를 구분하는 방법이 더 효율적입니다.
form 엘리먼트는 input 엘리먼트 안에 내용을 모두 작성하고 Enter 나 <전송>을 누룰시 submit 이벤트가 발생하면 페이지가 새로고침이 됩니다. 이것 때문에 리액트의 상태가 초기화 되는 현상이 발생합니다. => 이 현상을 막기 위해 onSubmit 함수에서 이벤트의 기본값을 막는 e.preventDefault()를 사용합니다. 이렇게 하면 submit 이벤트가 발생했을 때 hadleLogInSubmit 함수에서 submit 이벤트를 가로채고 이벤트의 기본값을 e.preventDefault()가 막아서 새로고침이 발생하지 않습니다.
newAccount를 useState 함수로 정의합니다. newAccout의 true, false에 따라 handleLogInSubmit 함수에서 회원가입과 로그인할 수 있도록 코드를 분기합니다. 이러한 방식으로 하면 깔끔하게 회원가입과 로그인 기능을 만들 수 있습니다.
버튼 역활을 할 input 엘리먼트의 문구도 newAccount 에 따라 다르게 적용합니다. => newAccount 의 true, false 에 따라 회원가입 또는 로그인 기능을 할 수 있도록 코드를 작성한 것입니다.