TIL 53. 2024-03-14

이준구·2024년 3월 14일
0

TIL 순서

목록 보기
53/119
post-thumbnail

mutation 부분을 별도의 useHook으로 분리

"use client";

import { useMutation, useQueryClient } from "@tanstack/react-query";
import { deleteTodo, patchTodo, postTodo } from "./useQuery";
import { queryKey } from "../queryKey/queryKey";

// CREATE
export const useCreate = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: postTodo,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [queryKey.todos] });
    },
  });
};

//UPDATE
export const useUpdate = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: patchTodo,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [queryKey.todos] });
    },
  });
};

//DELETE
export const useDelete = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: deleteTodo,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [queryKey.todos] });
    },
  });
};

ChangeHandler 별도로 분리

"use client";

import { InputTodo } from "@/interface/types";
import { ChangeEvent, useState } from "react";

const useInput = (initialState: InputTodo) => {
  const [inputValue, setInputValue] = useState(initialState);

  const onInputChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {
    const { name, value } = e.target;

    setInputValue((prev) => ({ ...prev, [name]: value }));
  };

  const onTextAreaChangeHandler = (e: ChangeEvent<HTMLTextAreaElement>) => {
    const { name, value } = e.target;

    setInputValue((prev) => ({ ...prev, [name]: value }));
  };

  const inputReset = () => {
    setInputValue(initialState);
  };

  return { inputValue, onInputChangeHandler, onTextAreaChangeHandler, inputReset };
};

export default useInput;
profile
개발 중~~~ 내 자신도 발전 중😂🤣

0개의 댓글

관련 채용 정보