https://www.udemy.com/course/best-react/
【한글자막】 React 완벽 가이드 with Redux, Next.js, TypeScript
Javascript부터 웹 어플리케이션 배포까지, React와 프론트엔드 최신 기술을 가장 쉽고 확실하게 배우는 법
www.udemy.com
이 게시물은 유데미 React 완벽 가이드 강의를 보고 메모를 남기는 게시물 입니다.
Custom Hooks
- 여러 컴포넌트에서 비슷한 코드를 사용할 때, 커스텀 훅을 사용하여 로직을 재사용하고 코드를 줄일 수 있다.
커스텀 훅 만들어보기
1초마다 카운터를 해주는 2개의 컴포넌트가 있다.
ForwardCounter 는 1초마다 카운터에 1을 더하고
BackwardCounter 는 1초마다 카운터에 1을 뺀다.
// ForwardCounter.js
import { useState, useEffect } from 'react';
import Card from './Card';
const ForwardCounter = () => {
const [counter, setCounter] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCounter((prevCounter) => prevCounter + 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return <Card>{counter}</Card>;
};
export default ForwardCounter;
// BackwardCounter.js
import { useState, useEffect } from 'react';
import Card from './Card';
const BackwardCounter = () => {
const [counter, setCounter] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCounter((prevCounter) => prevCounter - 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return <Card>{counter}</Card>;
};
export default BackwardCounter;
이 2개의 컴포넌트는 비슷한 코드를 사용하고 있으므로 커스텀 훅을 만들 수 있다.
hooks 라는 폴더를 생성하고 use-counter.js를 만든다.
그다음 커스텀 훅을 작성한다.
주의할 점은 커스텀 훅 네임은 use를 꼭 붙여서 만든다.
import { useState, useEffect } from "react";
// use를 붙여 useCounter 라고 만듦
const useCounter = (forwards = true) => {
const [counter, setCounter] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
if (forwards) {
setCounter((prevCounter) => prevCounter + 1);
} else {
setCounter((prevCounter) => prevCounter - 1);
}
}, 1000);
return () => clearInterval(interval);
}, [forwards]);
return counter;
};
export default useCounter;
커스텀 훅을 만들었으면 각각 컴포넌트에 임포트하여 상수에 넣어 사용하면 된다.
// ForwardCounter.js
import Card from "./Card";
import useCounter from "../hooks/use-counter";
const ForwardCounter = () => {
const counter = useCounter();
return <Card>{counter}</Card>;
};
export default ForwardCounter;
// ForwardCounter.js
import Card from "./Card";
import useCounter from "../hooks/use-counter";
const BackwardCounter = () => {
const counter = useCounter(false);
return <Card>{counter}</Card>;
};
export default BackwardCounter;
'Study > Udemy-React-완벽 가이드' 카테고리의 다른 글
17. 연습 프로젝트 (feat. 유데미 React 완벽 가이드) (0) | 2022.06.12 |
---|---|
16. 양식 및 사용자 입력 작업 (feat. 유데미 React 완벽 가이드) (0) | 2022.06.12 |
14.4 HTTP 요청보내기: POST 요청 (feat. 유데미 React 완벽 가이드) (0) | 2022.06.06 |
14.3 HTTP 요청보내기: 요청에 useEffect() 사용하기 (feat. 유데미 React 완벽 가이드) (0) | 2022.06.06 |
14.2 HTTP 요청보내기: Http 오류 처리하기 (feat. 유데미 React 완벽 가이드) (0) | 2022.06.06 |