[React] 꿈 일기 기록 사이트 제작 일지-5. 일기 정렬 기능 및 페이지 이동 버튼 구현

2023. 9. 25. 02:00·웹 프로젝트/🌜꿈 일기장
반응형

Home.js에서 일기 리스트 렌더링 부분만 빼서 새로운 DiaryList라는 컴포넌트를 만들었다.

이 DiaryList 컴포넌트에서 일기 검색창, 일기 정렬 드롭다운, 일기 작성 버튼, 일기 리스트 렌더링을 수행한다 .

형광펜 칠한 부분을 DiaryList 컴포넌트에 구현한다.

 

일기 정렬 및 일기 작성 페이지로 이동 

import { useState } from "react";
import Button from "../components/Button";
import { useNavigate } from "react-router-dom";

const sortOption = [
  { value: "latest", name: "최신순" },
  { value: "oldest", name: "오래된 순" },
];

//최신순, 오래된 순 출력해주고 각 값을 선택하면 그에 맞춰 setSortType을 바꿔주는 컴포넌트
const ControlMenu = ({ value, choosOption, optionList }) => {
  return (
    <select value={value} onChange={(e) => choosOption(e.target.value)}>
      {optionList.map((it, idx) => (
        <option key={idx} value={it.value}>
          {it.name}
        </option>
      ))}
    </select>
  );
};

const DiaryList = ({ diaryList }) => {
  const navigate = useNavigate(); //페이지 이동
  const [sortType, setSortType] = useState("latest");

  //정렬한 값을 리턴해주는 함수
  const getSortedDiaryList = () => {
    const compare = (a, b) => {
      //options 값에 따라 정렬 방법이 달라진다. 
      if (sortType === "latest") {
        //내림차순
        return parseInt(b.date) - parseInt(a.date);
      } else {
        //오름차순
        return parseInt(a.date) - parseInt(b.date);
      }
    };

    //일기 복사
    const copyList = JSON.parse(JSON.stringify(diaryList));
    //복사한 일기를 정렬
    const sortedList = copyList.sort(compare);
    //정렬한 일기리스트를 리턴
    return sortedList;
  };

최신순, 오래된 순으로 일기를 정렬하는 드롭다운을 구현하기 위해 <option>태그를 사용했다.

sortOption에서 일기를 정렬할 두 가지 기준을 미리 정의해 주고 ControlMenu 컴포넌트를 통해 사용자가 선택한 값에 따라 sortType state를 변경해 준다.

getSortedDiaryList()는 일기 리스트 값을 복사해 sortType 값에 따라 정렬한 뒤 정렬한 일기를 리턴해주는 함수이다. 원본 리스트를 손상시키지 않기 위해 일기 리스트의 복사를 진행한다. 

 

  return (
    <div>
      <ControlMenu
        value={sortType}
        choosOption={setSortType}
        optionList={sortOption}
      />
      <Button
        type="positive"
        text="새 일기 작성"
        onClick={() => navigate("/new")}
      />
      {getSortedDiaryList().map((it) => (
        <div key={it.id}>{it.content}</div>
      ))}
    </div>
  );
};

export default DiaryList;

 

return 문 내에서는 위에서 생성한 드롭다운 컴포넌트, 일기를 작성할 수 있는 /new 페이지로 이동할 수 있는 새일기 작성 버튼을 출력한다. 

getSortedDiaryList()를 통해 정렬된 일기 리스트를 화면에 렌더링한다. 

 

 

 

기능은 완성되었으니 CSS로 스타일링해주면 아래와 같은 화면이 완성된다.

 

 

 

 

 

페이지 구현: 홈(Home)-DiaryList 컴포넌트 분리, 일기 정렬 기능 및 페이지 이동 버튼 구현 · Yoonyesol/

Yoonyesol committed Sep 24, 2023

github.com

 

 

페이지 구현: 홈(Home)-select, button CSS 스타일링 · Yoonyesol/Dream_note@2a524d8

Yoonyesol committed Sep 24, 2023

github.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로젝트 > 🌜꿈 일기장' 카테고리의 다른 글

[React] 꿈 일기 기록 사이트 제작 일지-11. 일기 검색 기능 추가  (0) 2023.09.27
[React] 꿈 일기 기록 사이트 제작 일지-10. 사용자가 장르를 수정할 수 있는 `사용자 장르 추가/삭제 기능` 구현 (+ localStorage)  (2) 2023.09.27
[React] 꿈 일기 기록 사이트 제작 일지-6. 일기아이템 생성 및 조회 페이지 이동 구현과 CSS 스타일링  (0) 2023.09.25
[React] 꿈 일기 기록 사이트 제작 일지-4. Home.js 작성한 월에 맞는 일기 리스트 렌더링  (0) 2023.09.24
[React] 꿈 일기 기록 사이트 제작 일지-2. 리액트 프로젝트 시작 및 페이지 만들기, 라우터 설정, 공용 컴포넌트 설정  (0) 2023.09.22
[React] 꿈 일기 기록 사이트 제작 일지-1. 기획 및 디자인 구상, url 설계  (0) 2023.09.22
'웹 프로젝트/🌜꿈 일기장' 카테고리의 다른 글
  • [React] 꿈 일기 기록 사이트 제작 일지-10. 사용자가 장르를 수정할 수 있는 `사용자 장르 추가/삭제 기능` 구현 (+ localStorage)
  • [React] 꿈 일기 기록 사이트 제작 일지-6. 일기아이템 생성 및 조회 페이지 이동 구현과 CSS 스타일링
  • [React] 꿈 일기 기록 사이트 제작 일지-4. Home.js 작성한 월에 맞는 일기 리스트 렌더링
  • [React] 꿈 일기 기록 사이트 제작 일지-2. 리액트 프로젝트 시작 및 페이지 만들기, 라우터 설정, 공용 컴포넌트 설정
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 프로그래밍 N
        • Programming
        • C | C++
        • Java N
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    웹사이트
    뉴렉처
    SWEA
    공식문서
    프로젝트
    알고리즘
    Til
    AWS
    백준
    bfs
    프로그래머스
    자바
    포트폴리오
    리액트
    ZeroCho
    Jiraynor Programming
    Next.js
    플러터
    블로그 제작
    spring boot
    mysql
    강의내용정리
    타입스크립트
    파이썬
    컴퓨터네트워크
    d3
    자바스크립트
    React
    클론 프로젝트
    구현
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[React] 꿈 일기 기록 사이트 제작 일지-5. 일기 정렬 기능 및 페이지 이동 버튼 구현
상단으로

티스토리툴바