프로그래밍 10

[Lunch Box] 12. 주문 화면

상단 네 번째 탭의 MY SALLAB을 클릭하면 내 주문 확인 화면으로 넘어간다. 주문화면에서는 내가 주문한 메뉴, 가격, 주문 상태, 주문 날짜를 확인한다. 실제 유저별 주문을 보여주진 않고 같은 데이터를 보여주는 기능만 구현하였다. 코드는 메뉴 화면과 거의 유사하다. Style은 material-ui의 withStyle을 이용하여 설정하였고 이미지와 데이터는 Firebase에서 받아온다. 주문 데이터는 Order component을 만들어서 반복된 형태의 데이터를 보여주도록 했다. My.js import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import Order from './..

[Lunch Box] 11. 공지 상세 화면

공지 화면에서 게시판 형태의 데이터 중 특정 행을 클릭하면 공지 상세 화면으로 넘어간다. 공지 상세 화면에서는 공지 화면으로부터 클릭한 행의 상세 정보를 받아 보여주며 댓글 기능을 제공한다. 스타일은 이전 화면과 동일하게 withStyles을 이용하였고 댓글 정보와 이미지를 Firebase에서 받아 오는 방법도 동일하다. 상세 정보는 Board component에서 props.location.state에서 받아온다. BoardDetail.js import React, { Component } from 'react'; import { Link } from 'react-router-dom'; import Reply from './Reply'; import { withStyles } from '@materia..

[Lunch Box] 10. 공지 화면

상단 세 번째 탭의 SALLABERS를 클릭하면 공지 화면으로 넘어간다. 공지 화면에서는 게시판 형태로 정보를 전달하고 편의를 위한 검색기능과 페이지 당 보여주는 게시물의 갯수를 변경하는 기능을 제공한다. 또한 여기서 제목을 클릭하면 세부 내용을 보여주는 화면으로 넘어가며 조회수가 1 증가한다. 각 게시물에서는 댓글을 작성할 수 있다. Board.js에서는 리스트 형태로 받아오는 공지 정보를 보여줘야한다. 이때 게시판 형태로 정보를 제공해야하는데 이를 위한 component는 material-ui에서 제공하므로 이를 이용하였다. 공지 화면의 기본적인 뼈대는 material-ui의 tables를 참고하였다. https://material-ui.com/components/tables/ Board.js imp..

[Lunch Box] 9. 메뉴 화면

상단 두 번째 탭의 MENU를 클릭하면 메뉴 화면으로 넘어간다. 메뉴에서도 특별한 기능 없이 샐랩의 메뉴만 보여준다. 주문하기 버튼이 있지만 기능 구현은 하지 않았다. 이전 화면들과 다른 점은 메뉴와 메뉴 카테고리를 나타내는 component를 만들어 이용했다는 점과 Firebase의 database에서 메뉴 정보를 가져왔다는 점이다. 이 두 가지 내용을 중점적으로 설명하고자 한다. Menu.js에서는 리스트 형태로 받아오는 메뉴 정보를 보여줘야한다. 비슷한 형태에서 데이터만 달라지는데 반복적으로 보여줘야 하므로 MenuContent, MenuCategory라는 component를 만들었고 이를 menu.js에서 이용하였다. MenuContent.js import React, { Component } f..

[Lunch Box] 8. 홈 화면

앞에서 설명했던 상단 탭과 하단탭 사이에 들어갈 내용을 보여주는 component는 총 5개이다. 그 중에서 기본적으로 설정된 component는 Home component이다. Home은 특별한 기능없이 샐랩에 관한 정보를 간략하게 보여준다 (물론 실제 샐랩의 정보는 아니다). Home.js import React,{Component} from 'react'; import myFireBase from '../../config/MyFireBase' import { withStyles } from '@material-ui/core/styles'; const styles = () => ({ homeTopLayout: { height: '45rem', textAlign: 'center', color: 'whi..

[Lunch Box] 7. 하단탭과 스타일 설정

main.js 의 마지막에는 Bottom이라는 모듈을 사용한다. 모든 화면에 고정으로 같은 하단탭을 보여주기 위함이다. 하단탭에는 별다른 기능이 웹 사이트에 대한 정보만 보여준다. Bottom.js import React from 'react'; import { withStyles } from '@material-ui/core/styles'; const styles = () => ({ mainBottom: { height: '400px', background: '#181a1e', paddingTop: '2.5rem', paddingRight: '11%', paddingLeft: '11%', '@media (max-width:960px)': { height: '550px' } }, mainBottomTab..

[Lunch Box] 6. 상단탭과 라우팅 설정

상단 탭과 라우팅은 main.js에서 정의한다. Main.js import React, { Component } from 'react'; import { Link, Route, Switch } from 'react-router-dom'; import Tabs from '@material-ui/core/Tabs'; import Tab from '@material-ui/core/Tab'; import { withStyles } from '@material-ui/core/styles'; import Home from '../home/Home'; import Menu from '../menu/Menu'; import Board from '../board/Board'; import My from '../my/My..

[Lunch Box] 5. css 파일

index.js에서는 두개의 css 파일인 textField.css, button.css를 import한다. 두 css 파일 모두 다른 모듈에서도 공통적으로 사용하기 때문에 index.js에서 import 하였다. 기본적인 스타일만 지정하였고 크기는 rem 단위를 이용하여 정의하였다. rem은 root element에서 설정한 크기를 기준으로 몇배인가를 의미하는 단위이다. index.css에서 960px보다 큰 화면에서는 font-size를 100%(16px)로 설정하였고 960px보다 작은 화면에서는 80%(12.8px)로 정의하였다. 예를들어 font-size를 4rem으로 했다면 큰 화면에서는 64px 작은 화면에서는 51.2px로 나타내게 된다. 크기 단위를 px로 하면 화면 크기와 상관없이 같은..

[Lunch Box] 4. 기본 페이지

[Lunch Box] 리액트 프로젝트가 생성되면 index.html, index.js, App.js가 생성된다. 각각을 다음과 같이 작성하였다. index.html 기본 페이지다. index.html에서 main.js를 불러오는 이유는 webpack이 작성한 모든 js파일을 main.js라는 파일로 빌드하도록 설정했기 때문이다. index.js import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import './css/button.css'; import './css/textField.css'; import App from './App'; ReactDOM.render(, document.getElementBy..

[Lunch Box] 3. Firebase 배포 설정

다음으로는 프로젝트 배포와 관련된 설정이다. 이 프로젝트는 firebase를 이용하여 배포 하였다. firebase.json, .firebasrc은 firebase를 배포하는 과정에서 생겨난 파일들이다. 각 내용이 정확하게 어떤 기능을 하는지는 파악하진 못했다. firebase.json { "hosting": { "public": "build", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ { "source": "**", "destination": "/index.html" } ] } } .firebaserc { "projects": { "default": "lunchbox-97110" } } firebase를 이용..