[React] 꿈 일기 기록 사이트 제작 일지-6. 일기아이템 생성 및 조회 페이지 이동 구현과 CSS 스타일링

2023. 9. 25. 11:47·웹 프로젝트/🌜꿈 일기장

 

 

일기 수정, 등록 페이지는 동일한 ui를 기반으로 하기 때문에 DiaryEditor 컴포넌트를 따로 작성해서 수정, 등록 페이지에 같이 사용하도록 한다.

import { useContext, useRef, useState } from "react";
import { useNavigate } from "react-router-dom";

import Button from "../components/Button";
import Header from "../components/Header";

import "./DiaryEditor.css";
import { DiaryContext } from "../context/diary-context";

const getStringDate = (date) => {
  return date.toISOString().slice(0, 10);
};

const DiaryEditor = () => {
  const { onCreate } = useContext(DiaryContext);

  const [date, setDate] = useState(getStringDate(new Date()));
  const [img, setImg] = useState();
  const [genre, setGenre] = useState("일상");
  const [title, setTitle] = useState("");
  const [content, setContent] = useState("");

  const imgRef = useRef();
  const titleRef = useRef();
  const contentRef = useRef();
  const navigate = useNavigate();

  const genreList = [
    { value: "daily", name: "일상" },
    { value: "fantasy", name: "판타지" },
    { value: "action", name: "액션" },
    { value: "adventure", name: "모험" },
    { value: "horror", name: "호러" },
  ];

  const setImgHandler = (e) => {
    const imgfile = imgRef.current.files[0];
    const reader = new FileReader();
    reader.onload = () => {
      setImg(reader.result);
    };
    reader.readAsDataURL(imgfile);
    setImg(imgfile);
  };

  const submitHandler = () => {
    if (!content) {
    }
    onCreate(date, img, genre, title, content);
    navigate("/", { replace: true });
  };

  return (
    <div className="diary-editor">
      <Header
        leftBtn={
          <Button
            type="negative"
            text="뒤로 가기"
            onClick={(e) => navigate(-1)}
          />
        }
        headText="새 일기 쓰기"
      />
      <div>
        <section>
          <h4>오늘의 날짜</h4>
          <input
            className="input-date"
            value={date}
            onChange={(e) => setDate(e.target.value)}
            type="date"
          />
        </section>
        <section>
          <h4>이미지</h4>
          <input type="file" onChange={setImgHandler} ref={imgRef} />
          {img && (
            <div className="img-preview">
              <img alt="이미지" src={img}></img>
            </div>
          )}
        </section>
        <section>
          <h4>장르 | 제목</h4>
          <div className="genre-title-wrapper">
            <div className="genre-wrapper">
              <select onChange={(e) => setGenre(e.target.value)}>
                {genreList.map((it, idx) => (
                  <option key={idx} value={it.value}>
                    {it.name}
                  </option>
                ))}
              </select>
            </div>
            <div className="title-wrapper">
              <input
                placeholder="제목"
                ref={titleRef}
                value={title}
                onChange={(e) => setTitle(e.target.value)}
              />
            </div>
          </div>
          <div>
            <h4>내용</h4>
            <div className="text-wrapper">
              <textarea
                placeholder="내용"
                ref={contentRef}
                value={content}
                onChange={(e) => setContent(e.target.value)}
              />
            </div>
          </div>
        </section>
        <section>
          <div className="control-btn">
            <Button
              type="negative"
              text="취소하기"
              onClick={(e) => navigate(-1)}
            />
            <Button type="positive" text="작성하기" onClick={submitHandler} />
          </div>
        </section>
      </div>
    </div>
  );
};

export default DiaryEditor;

 

 

 

스타일 적용 전

 

스타일 적용 후

 

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

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

[React] 꿈 일기 기록 사이트 제작 일지-12. 반응형 웹 CSS 스타일링  (0) 2023.09.27
[React] 꿈 일기 기록 사이트 제작 일지-11. 일기 검색 기능 추가  (0) 2023.09.27
[React] 꿈 일기 기록 사이트 제작 일지-10. 사용자가 장르를 수정할 수 있는 `사용자 장르 추가/삭제 기능` 구현 (+ localStorage)  (2) 2023.09.27
[React] 꿈 일기 기록 사이트 제작 일지-5. 일기 정렬 기능 및 페이지 이동 버튼 구현  (0) 2023.09.25
[React] 꿈 일기 기록 사이트 제작 일지-4. Home.js 작성한 월에 맞는 일기 리스트 렌더링  (0) 2023.09.24
[React] 꿈 일기 기록 사이트 제작 일지-2. 리액트 프로젝트 시작 및 페이지 만들기, 라우터 설정, 공용 컴포넌트 설정  (0) 2023.09.22
'웹 프로젝트/🌜꿈 일기장' 카테고리의 다른 글
  • [React] 꿈 일기 기록 사이트 제작 일지-11. 일기 검색 기능 추가
  • [React] 꿈 일기 기록 사이트 제작 일지-10. 사용자가 장르를 수정할 수 있는 `사용자 장르 추가/삭제 기능` 구현 (+ localStorage)
  • [React] 꿈 일기 기록 사이트 제작 일지-5. 일기 정렬 기능 및 페이지 이동 버튼 구현
  • [React] 꿈 일기 기록 사이트 제작 일지-4. Home.js 작성한 월에 맞는 일기 리스트 렌더링
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • 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
  • 공지사항

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

  • 태그

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

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[React] 꿈 일기 기록 사이트 제작 일지-6. 일기아이템 생성 및 조회 페이지 이동 구현과 CSS 스타일링
상단으로

티스토리툴바