강의

멘토링

커뮤니티

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

keeenco님의 프로필 이미지
keeenco

작성한 질문수

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

12.11) Home 페이지 구현하기 2. 기능

함수나 변수 작성(선언?) 위치 선택 기준

작성

·

32

0

아래의 코드를 기준으로 했을때, getMonthlyData함수는 Home 컴포넌트의 바깥에서 작성해주고 있고, 그외에 onIncreaseMonth같은 것은 Home 내부에 작성해주고 있는데, 매번 이런 작성 위치가 헷갈리더라고요. 작성 위치를 정하는 명확한 기준이 따로 있을까요??

import { useState, useContext } from "react";
import { DiaryStateContext } from "../App";
import Header from "../components/Header";
import Button from "../components/Button";
import DiaryList from "../components/DiaryList";

const getMonthlyData = (pivotDate, data) => {
  const beginTime = new Date(
    pivotDate.getFullYear(),
    pivotDate.getMonth(),
    1,
    0,
    0,
    0
  ).getTime();
  const endTime = new Date(
    pivotDate.getFullYear(),
    pivotDate.getMonth() + 1,
    0,
    23,
    59,
    59
  ).getTime();

  return data.filter(
    (item) => beginTime <= item.createdDate && item.createdDate <= endTime
  );
};

const Home = () => {
  const data = useContext(DiaryStateContext);
  const [pivotDate, setPivotDate] = useState(new Date());

  const monthlyData = getMonthlyData(pivotDate, data);

  const onIncreaseMonth = () => {
    setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() + 1));
  };
  const onDecreaseMonth = () => {
    setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() - 1));
  };

  return (
    <div>
      <Header
        title={`${pivotDate.getFullYear()}년 ${pivotDate.getMonth() + 1}월`}
        leftChild={<Button onClick={onDecreaseMonth} text={"<"} />}
        rightChild={<Button onClick={onIncreaseMonth} text={">"} />}
      />
      <DiaryList />
    </div>
  );
};
export default Home;

답변 2

0

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

안녕하세요 keeenco님 이정환입니다.

AI의 인턴의 답변대로 컴포넌트가 리렌더링 될 때 마다 재생성 할 필요가 없거나, State 등의 컴포넌트 내부에서만 접근할 수 있는 변수를 사용하지 함수나 변수는 컴포넌트 외부에 두는게 성능적으로 유리합니다.

리액트 컴포넌트 역시 함수이므로 리렌더링 될 경우 내부적으로는 다시 호출되는 과정을 겪는데요, 특정 함수가 재 호출되면 해당 함수 내부에 있는 변수나 함수가 모두 재 생성(초기화)되는 과정을 겪기 때문에 이렇다고 이해하시면 되겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. keeenco님, 함수나 변수 작성 위치 선택에 대해 궁금하신 부분을 해결해드리겠습니다.

작성 위치 기준

  1. 외부 설정 (컴포넌트 밖):

    • 성능 최적화: 컴포넌트가 리렌더링될 때마다 재생성될 필요가 없는 함수나 변수는 컴포넌트 외부에 선언하는 것이 좋습니다. 이렇게 하면 불필요한 리소스 사용을 줄일 수 있습니다. getMonthlyData 함수가 그 예로, 이 함수는 pivotDatedata라는 인자를 받기 때문에 컴포넌트 외부에 선언하여 재사용될 수 있습니다.
  2. 내부 설정 (컴포넌트 내):

    • 의존성: 컴포넌트의 상태나 props에 직접적으로 의존하는 함수는 컴포넌트 내부에 두는 것이 좋습니다. 이러한 함수를 외부로 빼내면 의도한 대로 동작하지 않을 수 있습니다. onIncreaseMonthonDecreaseMonth 함수는 pivotDate 상태에 의존하기 때문에 해당 컴포넌트 내부에 두어야 합니다.
    • 상태 관리: 컴포넌트의 상태 관리와 관련된 로직은 해당 컴포넌트 안에 두는 것이 좋습니다. 이를 통해 상태 변경 시 자동으로 UI를 갱신하도록 할 수 있습니다.

이 기준에 따라 컴포넌트의 외부와 내부에 함수 및 변수를 적절히 배치하면, 코드의 가독성을 높이고 성능을 최적화할 수 있습니다.

관련 질문 참고

컴포넌트 작성 위치에 대한 추가적인 예시와 설명을 아래 유사한 질문 링크에서 확인하실 수 있습니다:
- “Home page에서 getMonthlyData 함수”에 대한 답변
- “컴포넌트 외부에 선언한 함수에 대하여 질문드립니다.”에 대한 답변

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

keeenco님의 프로필 이미지
keeenco

작성한 질문수

질문하기