boardFormThunk

순9·2023년 9월 18일
0

리액트 게시판

목록 보기
24/54

비동기 함수

impot

//비동기 함수 생성 위해
import { createAsyncThunk } from "@reduxjs/toolkit";

//파이어베이스
import { firestore, } from "../../firebase";
import { collection, doc, setDoc } from "firebase/firestore";

//랜덤으로 숫자 생성
import { customAlphabet } from "nanoid";

//사용자 정보 가져오기 위해
import { getAuth } from "firebase/auth";

addUserData

const addUserData = createAsyncThunk<
  { boardId: any; boarditem: UserData }, //함수가 반환하는 비동기생성자 함수 작업의 결과물의 타입을 지정
  { boardId: any; boarditem: UserData } //인자로 받는 데이터의 타입을 지정
>("user/fetchUserData", async (data, thunkAPI) => {
  const { boardId, boarditem } = data;  //data는 반환 되는 값, 타입과 동일 해야함
  const { title, content } = boarditem;

  const nanoid = customAlphabet("123456789", 8);
  const id = nanoid();

  const auth = getAuth();
  const currentUser = auth.currentUser;
  const userId = currentUser?.uid;
  
  const userCollection = collection(firestore, "users");

  const userDataCollrection = collection(
    userCollection,
    "userData",
    userId as string
  );
  const dataIn = {
    did: boardId,
    index: id,
    title: title,
    content: content,
    timedata: new Date(),
  };

  //이름 지어서 문서 생성
  await setDoc(doc(userDataCollrection, id), dataIn);
  
   //문서 이름 자동으로 생성
  // await addDoc(userDataCollrection, dataIn);
  
  // 반환할 데이터 형식
  const responseData = {
    boardId: boardId,
    boarditem: {
      did: boardId,
      title: title,
      content: content,
      timedata: new Date(),
    },
  };

  return responseData;
});

export default addUserData;

학습

const { title, content } = boarditem;
-비구조화 할당 참고

material
nanoid
getAuth firbase 공홈 현재 로그인한 사용자 가져오기
파이어베이스 데이터 추가

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

0개의 댓글