티스토리 뷰
안녕하세요
오늘은 로그인 기능을 구현해보겠습니다.
index.js
import AuthContainer from "./AuthContainer";
export default AuthContainer;
index.js가 실행되면, AuthContainer를 호출한다.
**export default 뜻
1) default export : default로 선언된 모듈은 파일에서 단 하나의 변수, 클래스만 export가 가능하다.
- import는 아무이름이나 가능하다 ex) import hello from "./AuthContainer" 또는 import thisisAuth from "./AuthContainer"
2) named export : 한 파일 내에서 여러 변수 / 클래스들을 export 하는 것이 가능하다.
AuthContainer.js
import React, { useState } from "react";
import AuthPresenter from "./AuthPresenter";
import useInput from "../../Hooks/useInput";
import { useMutation } from "react-apollo-hooks";
import {LOG_IN} from "./AuthQueries";
export default () => {
/* useState는 Hook이다
Hook을 사용하여 변수의 상태값을 지정해준다 */
const [action, setAction] = useState("logIn");
const username = useInput("");
const password = useInput("");
const firstName = useInput("");
const lastName = useInput("");
const email = useInput("");
const [requestSecret] = useMutation(LOG_IN, {
variables: { email: email.value }
}
);
const onLogin = e => {
e.preventDefault();
if(email !== ""){
requestSecret();
}
}
return (
// AuthPresenter에 이 변수들을 전달
<AuthPresenter
setAction={setAction}
action={action}
username={username}
password={password}
firstName={firstName}
lastName={lastName}
email={email}
onLogin={onLogin}
/>
);
};
여기서 중요한 부분은 AuthContainer --> AuthPresenter로 action, 이메일, 이름, 비밀번호, onLogin 함수를 인자값으로 보낸다.
onLogin 함수는 email을 입력받았을 경우 requestSecret 함수를 호출하는 것이다.
** 내가 신기한 부분은 requestSecret 함수를 인자로 보내는 것이다.
AuthPresenter.js
import React from "react";
import styled from "styled-components";
import Input from "../../Components/Input";
import Button from "../../Components/Button";
const Wrapper = styled.div`
min-height: 80vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
`;
const Box = styled.div`
${props => props.theme.whiteBox}
border-radius: 0px;
width: 100%;
max-width: 350px;
`;
const StateChanger = styled(Box)`
text-align: center;
padding: 20px 0px;
`;
const Link = styled.span`
color: ${props => props.theme.blueColor};
cursor: pointer;
`;
const Form = styled(Box)`
padding: 40px;
padding-bottom: 30px;
margin-bottom: 15px;
form {
width: 100%;
input {
width: 100%;
&:not(:last-child) {
margin-bottom: 7px;
}
}
button {
margin-top: 10px;
}
}
`;
export default ({
action,
username,
firstName,
lastName,
email,
setAction,
onLogin
}) => (
<Wrapper>
<Form>
{action === "logIn" ? (
<form onSubmit={onLogin}>
<Input placeholder={"Email"} {...email} type="email"/>
<Button text={"Log in"} />
</form>
) : (
<form onSubmit={onLogin}>
<Input placeholder={"First name"} {...firstName}/>
<Input placeholder={"Last name"} {...lastName}/>
<Input placeholder={"Email"} {...email} type="email"/>
<Input placeholder={"Username"} {...username}/>
<Button text={"Sign up"} />
</form>
)}
</Form>
<StateChanger>
{action === "logIn" ? (
<>
Don't have an account?{" "}
<Link onClick={() => setAction("signUp")}>Sign up</Link>
</>
) : (
<>
Have an account?{" "}
<Link onClick={() => setAction("logIn")}>Log in</Link>
</>
)}
</StateChanger>
</Wrapper>
);
Form에서 버튼 클릭시 onSubmit 함수를 실행한다. 이 때 onLogin 함수가 실행되어 requestSecret을 실행하여 서버에서 아이디를 조회를 한다.
입력화면
출력화면
AuthQueries.js
import { gql } from 'apollo-boost';
export const LOG_IN = gql`
mutation requestSecret($email: String!){
requestSecret(email: $email)
}
`;
AuthContainer에서 LOG_IN 쿼리를 호출하면 저렇게 PRISMA 서버를 호출한다.
'프로젝트' 카테고리의 다른 글
[인스타그램 클론코딩] #4.3 Apollo Client (0) | 2020.11.16 |
---|---|
[인스타그램 클론코딩] #4.2 React Router (0) | 2020.11.11 |
[인스타그램 클론코딩] #4.1 GlobalStyle and Theme (0) | 2020.10.06 |
[인스타그램 클론코딩] #4.0 create-react-app cleanup and installation (0) | 2020.09.28 |
[인스타그램 클론코딩] #3.28~#3.29 newMessage Subscription (0) | 2020.09.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커
- 월급쟁이부자들
- 개발자 회고
- front
- 항해솔직후기
- docker
- 항해플러스후기
- 유즈케이스
- 관계대수
- 2023년
- push_back
- 부동산공부
- Use case
- 내년은 빡세게!!
- pop_back
- 열반스쿨기초반
- resize
- 파라메터
- github
- 항해플러스백엔드
- Spring boot
- 깃
- 인셉션
- Inception
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- GIT
- 폭포수
- 재테크공부
- 깃허브
- 월부닷컴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함