Home 미니 블로그 만들기 - 01
Post
X

미니 블로그 만들기 - 01

미니 블로그 기획해보기

  • 필요한 기능

    • 글 목록 보기 기능 (리스트 형태)
    • 글 보기 기능
    • 댓글 보기 기능
    • 글 작성 기능
    • 댓글 작성 기능
  • 주요 컴포넌트 구성하기

    • 글 목록 보기 기능 : MainPage, PostList, PostListItem
    • 글 보기 기능 : PostViewPage
    • 댓글 보기 기능 : CommentList, CommentListItem
    • 글 작성 기능 : PostWritePage
    • 댓글 작성 기능 : CommentWrite

레이아웃 디자인 짜보기 - Figma

Figma와 같은 Tool을 활용해 와이어프레임을 그려봅니다.

mini-blog


UI 컴포넌트 구현

웹 사이트에 필수적으로 필요한 UI 컴포넌트를 먼저 구현해보겠습니다.

프로젝트 설계는 Top Down 방식으로 큰 틀부터 기획한 후 작은 부분을 구체화합니다.
프로젝트 구현은 Bottom Up 방식으로 작은 요소(UI 컴포넌트 등)부터 구현한 후 모아서 큰 부분을 완성합니다.

  • 폴더 구성하기

    src

    component

    ui


Material-UI

참고 : MUI

MUI를 사용하면 이미 잘 설계된 컴포넌트를 사용하여 개발 시간을 줄일 수 있으며, 일관된 디자인을 적용할 수 있습니다.

가장 큰 장점은 기능적인 UI를 제공하면서 다양하게 커스터마이징을 할 수 있다는 점입니다.

  • 설치

    1
    2
    
    // MUI + emotion
    npm install @mui/material @emotion/react @emotion/styled
    

index.js 파일 수정

앞으로 MUI를 사용하기 위해 index.jsx 파일을 작성하겠습니다.

  • CssBaseline : reset.css 대신 MUI에서 사용하는 CSS reset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";

import CssBaseline from "@mui/material/CssBaseline";

const root = ReactDOM.createRoot(document.getElementById("root"));

root.render(
  <>
    <CssBaseline />
    <App />
  </>
);

버튼 컴포넌트 구현

MUI를 활용해 글 작성하기, 글 작성 완료, 뒤로 가기 등에서 사용할 버튼 컴포넌트를 구현해보겠습니다.

props로 title 값을 받아 버튼 안에 출력하겠습니다.

색상은 MUI에서 제공해주는 기본 색상인 primary로 설정하고 variant의 값을 contained로 설정해 안을 채워주겠습니다.

MUI의 Button Component API는 MUI-Button API에서 확인할 수 있습니다.

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
import * as React from "react";
import { Button } from "@mui/material";
import { styled } from "@mui/material/styles";

const StyledButton = styled(Button)`
  padding: 8px 16px;
  border-radius: 8px;
  border-width: 1px;
  font-size: 8px;
  font-family: sans-serif;
  font-weight: 600;
  cursor: pointer;
`;

export default function BasicButton(props) {
  const { title, onClickItem } = props;

  return (
    <>
      <StyledButton onClick={onClickItem} variant="contained" color="primary">
        {title}
      </StyledButton>
    </>
  );
}

TextInput 컴포넌트 구현

글이나 댓글 작성 시 제목과 내용 등을 입력할 TextInput 컴포넌트를 구현해보겠습니다.

버튼 컴포넌트와 유사하게 MUI의 TextField 컴포넌트를 import한 후 커스터마이징해서 사용해보곘습니다.

Button API처럼 TextField API를 확인한 후 사용해줍니다.

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 * as React from "react";
import { TextField } from "@mui/material";
import { styled } from "@mui/material/styles";

const StyledTextInput = styled(TextField)`
  width: 100%;
  font-size: 16px;
  line-height: 20px;
`;

const TextInput = (props) => {
  const { rows, value, onChange, placeholder } = props;

  return (
    <>
      <StyledTextInput
        value={value}
        onChange={onChange}
        id="content"
        label={placeholder}
        multiline={rows > 1 && true}
        rows={rows}
        variant="filled"
      />
    </>
  );
};

export default TextInput;

커스터마이징 후 생성한 컴포넌트에 rows, value, onChange, placeholder 속성값으로 주었습니다.

  • rows

    생성할 텍스트필드가 화면에 나타낼 행의 수를 의미하며 1이 아닐 때 입력값이 넘어갈 경우 스크롤로 내려갑니다.

  • value

    입력하는 문자열을 말하며 onChange를 통해 변화를 감지합니다.

  • onChange

    value가 변화했을 때 실행될 함수입니다.
    TextInput 컴포넌트를 사용하는 상위 컴포넌트에서 받아오겠습니다.

  • placeholder 사용자가 적절한 값을 입력할 수 있도록 도와주는 짧은 도움말을 의미합니다.


정리

반복적으로 사용할 UI 컴포넌트를 먼저 구현했습니다.

다음에는 UI 컴포넌트를 실제로 사용할 list 컴포넌트를 구현해보곘습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.