modifyForm.tsx

순9·2023년 10월 19일
0

리액트 게시판

목록 보기
29/54

수정 하는 페이지

import

import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { useParams } from "react-router-dom";
import modifyUserData from "../../redux/thunks/boardModifyThunk";

Modify

//선택한 페이지 id 받음
const { id } = useParams();

//선택한 보드 id
const selectedBoardId = useSelector(
    (state: any) => state.board.selectedBoardId
  );
//사용자 입력 데이터
const userData = useSelector((state: any) => state.boardItemMap.boarditem);
 
//사용자 정보
const userUidValue = useSelector((state: any) => state.login.user);
const uidVar = userUidValue?.uid;
const userDB = userData[selectedBoardId][0];

const dispatch = useDispatch();


//사용자가 입력 한 데이터 관련 hook
const [titleValue, settitleValue] = useState("");
const [contentValue, setContentValue] = useState("");

const navigate = useNavigate();


const handleWrite = async (e: React.FormEvent<HTMLFormElement>) => {
    e.preventDefault();

    try {
      const userData = {
        did: selectedBoardId, //board에서 불러 온 값
        title: titleValue,
        content: contentValue,
        timedata: new Date(),
        userUid: uidVar,
        isModified: true,
      };

      console.log(selectedBoardId);
      console.log(userData);
      dispatch(
        modifyUserData({
          boardId: selectedBoardId,
          boarditem: userData,
        }) as any
      );

      navigate(`/pagemo/${selectedBoardId}`); //수정 된 화면 경로
    } catch (error) {
      console.log(error);
      console.log("입력 오류 입니다");
    }
  };

modifyUserData에서 선택되는 값은 선택된 boardId와 사용자 입력 데이터

return

return (
    <>
      <div className="container">
        <header>
          <h1>글 수정 페이지 </h1>
        </header>
        <form onSubmit={handleWrite}>
          <div className="input_box">
            <input
              type="text"
              defaultValue={userDB.title} //등록된 데이터 출력
              placeholder="제목을 입력해주세요."
              onChange={(e) => settitleValue(e.target.value)}
            />
          </div>
          <div className="textarea_box">
            <textarea
              defaultValue={userDB.content}
              placeholder="내용을 입력 해주세요"
              onChange={(e) => setContentValue(e.target.value)}
            ></textarea>
            <input type="file" className="file_box" />
          </div>
          <div className="form_btn_box">
            <input type="submit" value="등록" />
            <input type="button" value="취소" />
          </div>
        </form>
      </div>
    </>
  );

수정 화면에서는 기존에 있었던 데이터가 input창에 출력 되도록 작업
사용자가 입력 하는 값에는 isModified를 추가 하여 수정전 false 수정 후 true로 변경 되도록 작업

profile
1. 사용법 익히기 2. 원리가 뭔지 찾아보기 3. 원리를 공부하기

0개의 댓글