5-5. 로그인 틀 만들기

이제 로그인을 위한 유저 인터페이스를 만들어보겠습니다. 앞으로 우리가 만들 유저 인터페이스를 미리 봐볼까요?

소셜 로그인의 경우엔 나중에 구현 할 것이며, 이번 섹션에선 하단 구글/페이스북 버튼들을 제외한 컴포넌트들을 만들도록 하겠습니다.

AuthWrapper 만들기

먼저, 로그인 화면의 틀을 담당하는 AuthWrapper 컴포넌트를 만들겠습니다. 이 컴포넌트 화면의 중앙에 위치하고, 상단에는 로고가 있고, 하단에는 흰색 배경을 가진 박스가 있으며, 전체 틀에 그림자가 설정됩니다.

그리고, children 을 통하여 받은 값을 흰색 박스 안에 렌더링 하도록 설정하겠습니다.

src/components/Auth/AuthWrapper.js

import React from 'react';
import styled from 'styled-components';
import oc from 'open-color';
import { shadow } from 'lib/styleUtils';
import { Link } from 'react-router-dom';

// 화면의 중앙에 위치시킨다
const Positioner = styled.div`
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
`;

// 너비, 그림자 설정
const ShadowedBox = styled.div`
    width: 500px;
    ${shadow(2)}
`;

// 로고
const LogoWrapper = styled.div`
    background: ${oc.teal[7]};
    height: 5rem;
    display: flex;
    align-items: center;
    justify-content: center;
`;

const Logo = styled(Link)`
    color: white;
    font-family: 'Rajdhani';
    font-size: 2.4rem;
    letter-spacing: 5px;
    text-decoration: none;
`;

// children 이 들어가는 곳
const Contents = styled.div`
    background: white;
    padding: 2rem;
    height: auto;
`;

const AuthWrapper = ({children}) => (
    <Positioner>
        <ShadowedBox>
            <LogoWrapper>
                <Logo to="/">HEURM</Logo>
            </LogoWrapper>
            <Contents>
                {children}
            </Contents>
        </ShadowedBox>
    </Positioner>
);

export default AuthWrapper;

그 다음엔 Auth 디렉토리를 위한 컴포넌트 인덱스를 만드세요.

src/components/Auth/index.js

export { default as AuthWrapper } from './AuthWrapper';

이제 렌더링을 해보겠습니다.

src/pages/Auth.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import * as baseActions from 'redux/modules/base';
import { AuthWrapper } from 'components/Auth';

class Auth extends Component {
    // 페이지에 진입 할 때 헤더를 비활성화
    componentWillMount() {
        this.props.BaseActions.setHeaderVisibility(false);
    }

    // 페이지에서 벗어 날 때 다시 활성화
    componentWillUnmount() {
        this.props.BaseActions.setHeaderVisibility(true);
    }

    render() {
        return (
            <AuthWrapper>

            </AuthWrapper>
        );
    }
}

export default connect(
    (state) => ({

    }),
    (dispatch) => ({
        BaseActions: bindActionCreators(baseActions, dispatch)
    })
)(Auth);

AuthContent 만들기

AuthContent 컴포넌트는 우리가 만들 /auth/login/auth/register 서브 라우트를 감싸주는 컴포넌트입니다. 각 서브라우트 컴포넌트는 컨테이너 컴포넌트로 만들어지게 됩니다.

AuthContent 는 현재 어떤 페이지인지 알려줄 제목을 title props 로 받아와서 보여주고, 그 하단에는 children 을 렌더링해줍니다.

src/components/Auth/AuthContent.js

import React from 'react';
import styled from 'styled-components';
import oc from 'open-color';

const Title = styled.div`
    font-size: 1.5rem;
    font-weight: 500;
    color: ${oc.gray[8]};
    margin-bottom: 1rem;
`;

const AuthContent = ({title, children}) => (
    <div>
        <Title>{title}</Title>
        {children}
    </div>
);

export default AuthContent;

이제 이 파일을 인덱스에 추가하세요.

src/components/Auth/index.js

export { default as AuthWrapper } from './AuthWrapper';
export { default as AuthContent } from './AuthContent';

Login 과 Register 컴포넌트 만들기

방금 만든 컴포넌트를 사용하여 서브라우트로 사용할 Login 과 Register 컴포넌트를 containers/Auth 경로에 만드세요.

src/containers/Auth/Login.js

import React, { Component } from 'react';
import { AuthContent } from 'components/Auth';

class Login extends Component {
    render() {
        return (
            <AuthContent title="로그인">

            </AuthContent>
        );
    }
}

export default Login;

src/containers/Auth/Register.js

import React, { Component } from 'react';
import { AuthContent } from 'components/Auth';

class Register extends Component {
    render() {
        return (
            <AuthContent title="회원가입">

            </AuthContent>
        );
    }
}

export default Register;

각 컴포넌트에 다른 title 을 설정해주었습니다. 이제 이 컴포넌트들의 인덱스파일을 만드세요.

src/containers/Auth/index.js

export { default as Login } from './Login';
export { default as Register } from './Register';

Auth 에 서브라우트 설정하기

/auth/login 에 들어오면 Login 컴포넌트를, 그리고 /auth/register 에 들어오면 Register 컴포넌트를 보여주도록 설정해봅시다.

src/pages/Auth.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import * as baseActions from 'redux/modules/base';
import { AuthWrapper } from 'components/Auth';
import { Route } from 'react-router-dom';
import { Login, Register } from 'containers/Auth';

class Auth extends Component {
    // 페이지에 진입 할 때 헤더를 비활성화
    componentWillMount() {
        this.props.BaseActions.setHeaderVisibility(false);
    }

    // 페이지에서 벗어 날 때 다시 활성화
    componentWillUnmount() {
        this.props.BaseActions.setHeaderVisibility(true);
    }

    render() {
        return (
            <AuthWrapper>
                <Route path="/auth/login" component={Login}/>
                <Route path="/auth/register" component={Register}/>
            </AuthWrapper>
        );
    }
}

export default connect(
    (state) => ({

    }),
    (dispatch) => ({
        BaseActions: bindActionCreators(baseActions, dispatch)
    })
)(Auth);

이제 로그인 페이지를 구현하기위한 기본적인 틀이 구성되었습니다!

다음 페이지들을 들어가서 각 타이틀이 제대로 뜨는지 확인하세요:

results matching ""

    No results matching ""