라우터 구성

Review/프론트엔드 - 인스타그램 클론

라우터 구성

조커린 2020. 2. 22. 07:18

라우터 구성은 로그인 하지 않았을 때 보이는 로그인 화면 Auth

로그인 했을 떄 보이는 Feed 로 구성되어 있음. 

 

아폴로 클라이언트의 도움을 받아 isLoggedIn 변수를 이용해 바꿔줌 

 

app.js

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import React from "react";
import { gql } from "apollo-boost";
import styled, { ThemeProvider } from "styled-components";
import GlobalStyles from "../Styles/GlobalStyles";
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
 
import Theme from "../Styles/Theme";
import Router from "./Router";
import { useQuery } from "react-apollo-hooks";
import Footer from "./Footer";
 
const QUERY = gql`
{
  isLoggedIn @client
}
`;
 
const Wrapper = styled.div`
  margin: 0 auto;
  max-width: 935px;
  width100%;
`;
 
export default () => 
{
  const {
    data: { isLoggedIn }
  } = useQuery(QUERY);
 
  return(
    <ThemeProvider theme={Theme}>
      <Wrapper>
        <GlobalStyles />
        <Router isLoggedIn={isLoggedIn} />
        <Footer />
        <ToastContainer position={toast.POSITION.BOTTOM_LEFT}/>
      </Wrapper>
    </ThemeProvider>
  )
}
 
 
;
 
cs

변수 받아오고 라우터에 넘겨줌

 

 

라우터 상단에서 Auth, Feed 만들어준 컴포넌트를 불러오고

 

Router.js

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
import React from "react";
import PropTypes from "prop-types";
import { HashRouter as Router, Route, Switch } from "react-router-dom";
import Auth from "../Routes/Auth";
import Feed from "../Routes/Feed";
 
const LoggedInRoutes = () => (
  <>
    <Route exact path="/" component={Feed} />
  </>
);
 
const LoggedOutRoutes = () => (
  <>
    <Route exact path="/" component={Auth} />
  </>
);
 
const AppRouter = ({ isLoggedIn }) => (
  <Router>
    <Switch>{isLoggedIn ? <LoggedInRoutes /> : <LoggedOutRoutes />}</Switch>
  </Router>
);
 
AppRouter.propTypes = {
  isLoggedIn: PropTypes.bool.isRequired
};
 
export default AppRouter;
cs

두 가지 라우터를 변수 토글로 바꾸어줌.

 

1
2
3
4
5
6
export const defaults = {
    // isLoggedIn : localStorage.getItem("token") !== null ? true : false
    ///Boolean("dgdgsj") == true Boolean(null) == false
    isLoggedIn: Boolean(localStorage.getItem("token")) || false
}
 
cs

로컬스토리지에 토큰값이 있으면 true 없으면 false 뜬다. 

 

 

isLoggedIn : localStorage.getItem("token") !== null ? true : false

 

 

이렇게 쓸 수 있는 건데 저 문법으로 사용 가능 내부의 값이 있는 지 없는 지 판별해 가져옴

토큰 값 직접 넣어서 확인해본다.