인프런 커뮤니티 질문&답변

CHO HYUNGCHAN님의 프로필 이미지
CHO HYUNGCHAN

작성한 질문수

[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

6.3) 기능 구현하기

카운터앱 구현하기에서 커스텀훅으로 관리하는 방법은 어떤가요?

작성

·

60

0

안녕하세요!

카운터앱 구현하기를 조금 다르게 코드를 짜보았는데, 커스텀훅을 활용법에 익숙하지 않아서, 이렇게 구현하는 방법이 적절한지 감이 안와요.. 바쁘신데 죄송하지만 아래와 같은 커스텀훅 구현방식의 장단점에 대해서 알려주시면 감사하겠습니다!

 

먼저 useCount.jsx를 아래와 같이 작성하였구요

import { useState } from 'react';

function useCount() {
    const [num, setNum] = useState(0);
    const onClinkCount = (e) => {
        setNum(num + Number(e.target.value))
    }
    return [num, onClinkCount];
}

export default useCount;

아래는 넘버 조작 부분인 Controller.jsx

const Controller = ({ onClinkCount }) => {
    return (
        <div>
            <button onClick={onClinkCount} value="-1">-1</button>
            <button onClick={onClinkCount} value="-10">-10</button>
            <button onClick={onClinkCount} value="-100">-100</button>
            <button onClick={onClinkCount} value="+100">+100</button>
            <button onClick={onClinkCount} value="+10">+10</button>
            <button onClick={onClinkCount} value="+1">+1</button>
        </div>
    )
}

export default Controller

카운트 넘버 표시부분인 Viewer.jsx

const Viewer = ({ num }) => {
    return (
        <div>
            <div>현재 카운트:</div>
            <h1>{num}</h1>
        </div>
    )
}

export default Viewer

그리고 부모 컴포넌트인 App.jsx 입니다.

import "./App.css"
import Controller from './components/Controller'
import Viewer from './components/Viewer'
import useCount from './hooks/useCount'


function App() {
  const [num, onClinkCount] = useCount();
  return (
    <div className='App'>
      <h1>Simple Counter</h1>
      <section>
        <Viewer num={num} />
      </section>
      <section>
        <Controller onClinkCount={onClinkCount} />
      </section>
    </div>
  )
}

export default App

 

 

 

🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨

질문 하시기 전에 꼭 확인해주세요
- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)
- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)
- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)

질문 하실때 꼭 확인하세요
- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)
- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)
- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)
- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요

- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.
우선 커스텀 훅으로 관리하셔도 상관없습니다. 잘 만드셨네요 😃

그러나 카운터 예제에서 커스텀훅의 필요성에 대해서는 잘 모르겠습니다 ㅎㅎ
커스텀 훅의 주요 목적이자 장점은 반복되는 Hook 관련 로직을 컴포넌트로부터 분리하고 모듈화 함으로써 재 사용성을 높이는데에 있는데요

아쉽게도 위 예제에서는 useCount Hook을 불러다 쓸 만한 컴포넌트가 하나밖에 없어서 커스텀훅의 진가가 잘 드러나지 않는것 같습니다. 따라서 보통 이런 경우 향후의 확장성을 고려하는게 아니라면 커스텀훅으로 따로 분리하지 않는 편입니다.

그러나 이렇게 꾸준히 고민해보시는건 정말 좋은 습관인 것 같습니다 👍
또 커스텀훅을 연습겸으로 만들어 보신 점도 대단히 높게 평가합니다
(제가 뭐 대단한 사람은 아니지만요 ...! 🤣)

0

안녕하세요, 인프런 AI 인턴입니다.
CHO HYUNGCHAN님이 질문해주신 내용에 대해 유사한 주제를 다룬 게시물을 찾아 보았습니다.

질문해주신 주제에 근접한 질문 답변이 있어, 관련 정보를 제공해드릴 수 있을 것 같습니다. 다음 링크들을 확인해보세요:

  1. 마크다운 형식으로 제목을 붙여서 넣어드렸습니다:
  1. 관심있는 주제에 관한 자세한 설명:
    • 이 질문에서는 React의 상태 관리와 컴포넌트의 리렌더링에 대한 장단점을 다루고 있습니다.

CHO HYUNGCHAN님이 작성하신 커스텀 훅의 코드에서 장단점에 대해 설명해 드리겠습니다.

장점:

  1. 재사용성: useCount 훅을 여러 컴포넌트에서 재사용할 수 있습니다.
  2. 코드의 가독성: 상태 로직을 커스텀 훅으로 분리함으로써 코드가 더 깔끔해지고 유지보수가 용이해집니다.
  3. 컴포넌트의 간소화: 상태 로직을 훅으로 분리함으로써 각 컴포넌트는 자신의 역할에만 집중할 수 있습니다.

단점:

  1. 복잡해질 수 있음: 초기 학습 비용이 필요하며, 작은 프로젝트에서는 오히려 코드가 더 복잡해질 수 있습니다.
  2. 추적 어려움: 여러 개의 커스텀 훅을 사용하다 보면 상태의 흐름을 추적하기 어려워질 수 있습니다.

추가적으로, 커스텀 훅을 사용할 때 함수 이름에서 발생한 타이포(onClinkCount -> onClickCount)를 수정해야 문제가 발생하지 않을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

CHO HYUNGCHAN님의 프로필 이미지
CHO HYUNGCHAN

작성한 질문수

질문하기