42organization / 42gg.client

탁구 매칭 웹 서비스 for 42cadet
https://gg.42seoul.kr
33 stars 7 forks source link

[Feat] agenda 상세정보 공지사항 추가 UI, API 연결 및 useFetchRequest #1470 #1475

Closed irenee-14 closed 1 month ago

irenee-14 commented 1 month ago

📌 개요

  1. useFetchRequest

    • axios로 POST, PATCH request

    • 인자로 method(POST, PATCH), url, body, params(쿼리파라미터), onSuccess(성공 시 실행), onError(에러 시 실행) 전달하여 실행

    • 정의

      const useFetchRequest = <T>() => {
        const [data, setData] = useState<T | null>(null);
        const [status, setStatus] = useState<number>(0);
        const [error, setError] = useState<string | null>(null);
      
        const sendRequest = async (
          method: 'POST' | 'PATCH',
          url: string,
          body: Record<string, any>,
          params?: Record<string, any>,
          onSuccess?: (data: T) => void,
          onError?: (error: string) => void
        ) => {
            ... 
        };
      
           return { data, status, error, sendRequest };
      };
    • 사용 방법

      const { data, status, error, sendRequest } = useFetchRequest();
      sendRequest(
          'POST',
          `announcement`,
          {
            title: announcementTitle,
            content: announcementDescription,
          },
          { agenda_key: agendaKey },
           (data) => {
            router.push(`/agenda/${agendaKey}`);
          },
          (error: string) => {
            console.error(error);
          }
       );

    💡 관련 이슈

    • 1470