2018~2019/React.js
React로 블로그 만들기 #7
전기도둑
2018. 11. 1. 17:52
React로 블로그 만들기 #7
- 로그인 구현(4) HOC -
1. HOC (Higher Order Component)
- 리액트 컴포넌트를 인자로 받아서 새로운 리액트 컴포넌트를 리턴하는 함수이다.
- 비즈니스를 담당하는 컴포넌트와 뷰를 담당하는 컴포넌트를 분리할 때 사용함
- 그 외에도 SPA에서 로딩 중 화면 표시 또는 유저 인증 로직 처리, 에러 메시지 표시 등 다양한 방법으로 사용됨.
- 여기서는 유저 인증 로직 처리를 하기 위해 사용함. => 로그인 했을 때만 들어갈 수 있는 페이지(내 글보기, 마이페이지)를 위해 HOC 적용.
1) src/Components/LoginHOC.js 생성
- Store에 저장된 logged 상태에 따라 로그인 했을 때는 내 글보기, 마이페이지를 로그인을 하지 않았을 때는 로그인 페이지를 보여줌.
import React, { Component } from 'react';
import Store from '../Store/store';
import LoginContainer from './LoginContainer';
const withLogin = (WrappedComponent) =>
class IsLogin extends Component {
render() {
return (
<Store.Consumer>
{ store => {
if(store.logged === false)
return <LoginContainer />;
else
return <WrappedComponent />;
}}
</Store.Consumer>
);
}
};
export default withLogin;
2) src/Components/Myboard.js, MyPage.js
- 위에서 만든 로그인 HOC를 적용함
import React, { Component } from 'react';
import styled from 'styled-components';
import withLogin from './LoginHOC';
class MyBoard extends Component {
render() {
return (
<div>
내 글보기
</div>
);
}
}
export default withLogin(MyBoard);
import React, { Component } from 'react';
import styled from 'styled-components';
import withLogin from './LoginHOC';
class MyPage extends Component {
render() {
return (
<div>
MyPage
</div>
);
}
}
export default withLogin(MyPage);