흩어진 Mutation 모으기
- 아래에 mutation이 총 3개가 있다. 이 부분을 좀 더 깔끔하게 만들어보자.
function Input() {
const queryClient = useQueryClient();
(1) const mutation = useMutation(addTodo, {
onSuccess: (data) => {
console.log("data", data);
queryClient.invalidateQueries("todos");
},
});
mutation.mutate(newTodo);
todo.jsx
function Todo({ todo, isActive }) {
const queryClient = useQueryClient();
(2) const deleteMutation = useMutation(removeTodo, {
onSuccess: () => {
queryClient.invalidateQueries("todos");
},
});
(3) const switchMutation = useMutation(switchTodo, {
onSuccess: () => {
queryClient.invalidateQueries("todos");
},
});
const navigate = useNavigate();
const handleSwitchButton = () => {
const payload = {
id: todo.id,
isDone: !todo.isDone,
};
console.log(todo.id, !todo.isDone);
switchMutation.mutate(payload);
};
const handleRemoveButton = () => {
deleteMutation.mutate(todo.id);
};
useTodosQuery.js 파일 만들기
- useTodosQuery.js 파일 안에 모든 mutation을 함수로 넣어준다.
import { addTodo, removeTodo, switchTodo } from "../api/todos";
import { useMutation } from "react-query";
(1) export const useAddMutation = () => useMutation(addTodo);
(2) export const useDeleteMutation = () => useMutation(removeTodo);
(3) export const useSwitchMutation = () => useMutation(switchTodo);
mutation 호출하기
import { useAddMutation } from "../../../query/useTodosQuery";
function Input() {
const queryClient = useQueryClient();
const { mutate: addMutate } = useAddMutation();
addMutate(newTodo, {
onSuccess: () => {
queryClient.invalidateQueries("todos");
},
});
todo.jsx
import { useDeleteMutation, useSwitchMutation } from "../../../query/useTodosQuery";
const { mutate: deleteMutate } = useDeleteMutation();
const { mutate: switchMutate } = useSwitchMutation();
const handleSwitchButton = () => {
const payload = {
id: todo.id,
isDone: !todo.isDone,
};
console.log(todo.id, !todo.isDone);
switchMutate(payload, {
onSuccess: () => {
queryClient.invalidateQueries("todos");
},
});
};
const handleRemoveButton = () => {
deleteMutate(todo.id, {
onSuccess: () => {
queryClient.invalidateQueries("todos");
},
});
};
query key 관리하기
keys.constant.js 파일 만들기
- 해당 파일 안에 query key를 관리해준다.
-> todo list에는 하나 밖에 없지만 큰 프로젝트에서는 꼭 필요하다.
파일 안에 query key 넣고 export 하기
- 관리할 query key를 객체 안에 key: value 형식으로 넣어준다.
src/query/key.constant.js
export const QUERY_KEYS = {
TODOS: 'todos',
}
query key 사용하기
- 사용할 때는 QUERY_KEYS를 import 해주고 QUERY_KEYS.TODOS로 불러준다.
import { QUERY_KEYS } from "../../../query/key.constant";
queryClient.invalidateQueries(QUERY_KEYS.TODOS);