Form

순9·2023년 12월 7일
0

리액트 게시판

목록 보기
45/54

코드정리
사용안하는 라이브러리 제거

사용자 정보 불러오기
기존

 const auth = getAuth();
  const currentUser = auth.currentUser;
  const userId = currentUser?.uid;

수정

 // 로그인한 사용자 상태
  const userUidValue = useSelector((state: any) => state.login.user);
  const userId = userUidValue?.uid;

입력 state 통합
기존

 const [titleValue, settitleValue] = useState("");
  const [contentValue, setContentValue] = useState("");
  
  try {
      //userData는 이 액션에 전달할 데이터
      //액션의 목적에 따라 어떤 데이터를 전달할지 정의
      const userData = {
        did: selectedBoardId, //board에서 불러 온 값
        title: titleValue,
        content: contentValue,
        timedata: new Date(),
        userUid: userId as string,
        isModified: false,
      };
      await dispatch(
        addUserData({
          boardId: selectedBoardId,
          boarditem: userData,
        }) as any
      );

      settitleValue("");
      setContentValue("");

      // navigate("/page"); 기존 상세페이지로 이동 코드
      navigate(`/page/${selectedBoardId}`); //수정 된 코드
    } catch (error) {
      console.log(error);
      console.log("입력 오류 입니다");
    }
    
    
    return
     <div className="input_box">
            <input
              type="text"
              maxLength={30}
              defaultValue={titleValue}
              placeholder="제목을 입력해주세요."
              onChange={(e) => settitleValue(e.target.value)}
            />
          </div>
          <div className="textarea_box">
            <textarea
              defaultValue={contentValue}
              placeholder="내용을 입력 해주세요"
              onChange={(e) => setContentValue(e.target.value)}
            />

수정

addUserDatad 의 타입을 지정 하고 싶었는데 gpt에게 질문 한 결과..

일반적으로 Redux Toolkit에서 createAsyncThunk를 사용하면서, 해당 액션의 반환 타입을 명시적으로 지정하는 것은 까다로운 부분이 될 수 있습니다.보통 Redux Toolkit은 내부에서 액션 타입을 처리하고, 이에 따라 상태 업데이트를 자동으로 처리합니다.

state 통합 하여 값을 객체로 받고 태그에 name추가
setFormValue({
...formValue,
fieldName]: fieldValue, 형식으로 데이터 추가
});

 //사용자가 입력 한 데이터
  const [formValue, setFormValue] = useState({
    title: "",
    content: "",
  });
  
  try {
      //userData는 이 액션에 전달할 데이터
      //액션의 목적에 따라 어떤 데이터를 전달할지 정의
      const userData = {
        did: selectedBoardId, //board에서 불러 온 값
        title: formValue.title,
        content: formValue.content,
        timedata: new Date(),
        userUid: userId as string,
        isModified: false,
      };

     
      await dispatch(
        addUserData({
          boardId: selectedBoardId,
          boarditem: userData,
        }) as any
      );
      setFormValue({
        ...formValue,
        [fieldName]: fieldValue,
      });

      navigate(`/page/${selectedBoardId}`);
    } catch (error) {
      console.log(error);
      console.log("입력 오류 입니다");
    }
  };
  
  return
   <input
              type="text"
              maxLength={30}
              name="title"
              value={formValue.title}
              placeholder="제목을 입력해주세요."
              onChange={(e) =>
                setFormValue({ ...formValue, title: e.target.value })
              }
            />
          </div>
          <div className="textarea_box">
            <textarea
              value={formValue.content}
              name="content"
              placeholder="내용을 입력 해주세요"
              onChange={(e) =>
                setFormValue({ ...formValue, content: e.target.value })
              }
            />
profile
1. 사용법 익히기 2. 원리가 뭔지 찾아보기 3. 원리를 공부하기

0개의 댓글