영화 프로젝트 리팩토링 작업중에 useMutation로 개선하면 좋은 곳이 있어서
적용해보면서 공부를 해보려고 한다.
이전에 정리한 react query, useQuery에 이어서 진행...!
: fetch나 axios로 POST, PUT, DELETE 요청 등을 보낼 수 있는데,
useMutation으로 업데이트 하는 이유가 궁금했음
[fetch 예시]
const [loading, setLoading] = useState(false); // 상태 관리를 위한 추가적인 코드 작성1
const [error, setError] = useState(null); // 상태 관리를 위한 추가적인 코드 작성2
const exampleComponent = () => {
const fetchData = async () => {
setLoading(true);
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
// 요청 성공
setLoading(false);
// 성공한 데이터를 처리
} catch (error) {
// 요청 실패
setLoading(false);
setError(error.message);
}
};
return (
<div>
{loading && <p>Loading...</p>}
{error && <p>Error: {error}</p>}
{/* 데이터 표시 */}
</div>
);
}
[useMutation 예시]
import { useMutation } from 'react-query';
const submitSomethingMutate = useMutation({
mutationFn : (data) => { // ====> 매개변수는 여기에 ⭐️
// 저장하는 내용
return 결과
},
onSuccess: () => {
// 성공했을 때
},
onSuccess: () => {
// 실패했을 때
}
});
const handleSubmit = () => {
submitSomethingMutate.mutate({/* 전달할 데이터 */})
}
return (
<form onSubmit={handleSubmit}>
...
<button type="submit" disabled={mutation.isLoading}>
{mutation.isLoading ? 'Creating...' : 'Create User'}
</button>
</form>
);
};
export default CreateUserForm;
: useMutation을 반환해주는 커스텀 훅을 만들어서 로직을 분리해주는게 좋음
// useSaveSampleListMutation.js
export const useSaveSampleListMutation = () => {
return useMutation({
mutationFn : (data) => { // ====> 매개변수는 여기에 ⭐️
// 저장하는 내용
return 결과
},
onSuccess: () => {
// 성공했을 때
},
onSuccess: () => {
// 실패했을 때
}
})
}
const saveSampleMutate = useSaveSampleListMutation();
// 필요한곳에서 saveSampleMutate를 사용
saveSampleMutate.mutate({data}) // =====> 인수는 여기에서 전달 ⭐️
https://chat.openai.com/share/342b830b-8448-499e-940f-76d2086ee507