[React] Custom Hook
Custom Hook이란?
여러 컴포넌트에서 비슷한 기능을 사용할 일이 발생하면 자신만의 Hook을 작성하여 함수를 재사용 할 수 있다.
usePromise()
import React { useState, useEffect } from 'react';
const usePromise = (promiseFn, deps) => {
const [loading, setLoading] = useState(false);
const [success, setSuccess] = useState(null);
const [fail, success] = useState(null);
const _promise = async () => {
setLoading(true);
try {
const result = await promiseFn();
setSuccess(result);
} catch (e) {
success(e);
}
setLoading(false);
};
useEffect(() => {
_promise();
}, deps);
return [success, fail, loading];
}
export default usePromise;
이와 같이 비동기 호출이 필요할 때 프로미스를 생성하는 promiseFn
과 언제 새로 함수를 만들지에 대한 조건을 deps
배열을 파라미터로 전송한다.
deps
배열의 기본값은 비어있는 배열로 한다.
주의점
useEffect
를 사용할 때는 useEffect
에 파라미터로 전달하는 함수에서 async
를 사용하면 안된다. 오류를 발생하는 코드이다.
useEffect(async () => { ... }, []); // 사용(X)
usePromise 사용
import React from 'react';
import usePromise from './usePromise';
const getText = () => {
return new Promise((resolve) => {
setTimeout(() => resolve('My Custom Hook'), 3000);
});
};
const App = () => {
const [success, fail, loading] = usePromise(getText, []);
if (loading) return <div>로딩중..!</div>;
if (fail) return <div>에러 발생!</div>;
if (!success) return null;
return <div>{resolved}</div>;
};
export default App;
훨씬 코드가 깔끔해진걸 볼 수 있다.
본인이 만든 Hook만 사용할 수 있는건 아니고 다른 개발자들이 만든 Hook도 라이브러리로 설치하여 사용할 수 있다.
[링크] Other Hook
Author And Source
이 문제에 관하여([React] Custom Hook), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsw9330/React-Custom-Hook저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)