[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 2 ~ 섹션 7)

2024. 1. 11. 22:23·웹 프로그래밍/Next.js
반응형

섹션 2: React 시작하기

11. 2-2. 첫번째 리액트 앱 만들기

Vite

  • 빌드 도구.
  • 리액트 프로젝트 제작시 필요한 도구들이 자동으로 세팅되어 있는 리액트 앱을 생성해 준다.

Vite를 이용한 리액트 앱 생성 명령어

npm create vite@latest

 

생성된 앱에는 node_modules 폴더와 package.json, package-lock.json이 없으므로 직접 생성해 주어야 한다.

 

설치 명령어

npm install

 

vite.config.js: vite 설정 파일

 

리액트 앱 실행 명령어

npm run dev

→ 터미널에 뜬 주소를 복사해서 웹 브라우저에서 실행시킬 수 있다.

 

리액트 실행중단: q

 

 

섹션 5: React 라이프 사이클

useEffect

  useEffect(() => {
    console.log(count);
  }, [count]); //의존성 배열(Deps)
  const onClickButton = (value) => {
    setCount(count + value);
    console.log(`카운트: ${count}`);
    //useEffect가 필요한 이유!
    //count+value 변경된 값을 그대로 사용할 수 없음(상태변화 함수가 비동기이므로)
  };

 

라이프사이클

1. 마운트(탄생)

//1. 마운트
  useEffect(() => {
    console.log("마운트");
  }, []);


2. 업데이트(변화, 리렌더)

//2. 업데이트(변화, 리렌더) 제어
  //코드 업데이트 시점에만 실행되도록 하는 useEffect
  useEffect(() => {
    if (!isMountRef.current) {
      //아래 코드의 가드 역할
      isMountRef.current = true;
      return; //아래 코드가 실행되지 않음
    }
    console.log("업데이트");
  });


3. 언마운트(죽음)

//3. 언마운트(죽음)
  useEffect(() => {
    //첫번째 콜백함수의 언마운트 시 실행되는 콜백함수 리턴
    return () => {
      console.log("언마운트");
    };
  }, []);

 

실습 코드

 

 

25. 5-1. useEffect - 라이프 사이클 제어하기 · Yoonyesol/React-Next-Study@7944c36

Yoonyesol committed Jan 11, 2024

github.com

 

 

섹션 6: React Hook

콜백함수: 다른 함수의 인수로 전달되는 함수

 

Custom Hooks가 필요한 이유

여러 컴포넌트에서 react hook (useRef, useEffect, useState,,,) 을 사용한 동일한 코드를 필요로 할 때의 제약사항 때문.

제약사항: React Hooks는 일반 함수(컴포넌트)에서 호출불가

 

React Hooks는 컴포넌트의 내부, 또 다른 React Hook(Custom Hook 포함)에서만 호출할 수 있다.

따라서 Custom Hook을 만들어 로직을 분리한 뒤 필요한 컴포넌트에서 사용하는 방법을 택한다.

 

Custom Hook 만들기

useUpdate.js

import { useEffect, useRef } from "react";

export default function useUpdate(cb) {
  const isMountRef = useRef(false); //값을 저장하는 레퍼런스 객체로 useRef 사용
  //2. 업데이트(변화, 리렌더) 제어
  //코드 업데이트 시점에만 실행되도록 하는 useEffect
  useEffect(() => {
    if (!isMountRef.current) {
      //아래 코드의 가드 역할
      isMountRef.current = true;
      return; //아래 코드가 실행되지 않음
    }
    console.log("업데이트");

    cb(); //매개변수로 받은 콜백함수 실행
  });
}

 

사용

App.jsx

...
import useUpdate from "./hooks/useUpdate";

function App() {
  ...
  useUpdate(() => console.log("App 컴포넌트 업데이트")); //custom hook 사용

  ...
  
  return (
    ...
  );
}

export default App;

 

Controller.jsx

import useUpdate from "../hooks/useUpdate";

export default function Controller({ onClickButton }) {
  useUpdate(() => {
    console.log("Controller 컴포넌트 업데이트");
  });

  return (
    ...
  );
}

 

실습 코드

 

React Hook · Yoonyesol/React-Next-Study@d0c0ac4

Yoonyesol committed Jan 11, 2024

github.com

 

 

 

 

 

출처

https://kmooc.udemy.com/course/react-next-master/learn/lecture/39610746?start=30#overview

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로그래밍 > Next.js' 카테고리의 다른 글

[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 15 ~ 16: Next.js 렌더링 2 - SSG, Next.js 렌더링 3 - ISR)  (1) 2024.01.22
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 14: Next.js 렌더링 1 - SSR)  (1) 2024.01.22
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 13: 페이지 라우터)  (0) 2024.01.21
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 12: Next.js 소개)  (0) 2024.01.15
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 10: Context)  (1) 2024.01.13
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 8 ~ 섹션 9)  (0) 2024.01.13
'웹 프로그래밍/Next.js' 카테고리의 다른 글
  • [유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 13: 페이지 라우터)
  • [유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 12: Next.js 소개)
  • [유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 10: Context)
  • [유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 8 ~ 섹션 9)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    Next.js
    블로그 제작
    뉴렉처
    프로그래머스
    구현
    컴퓨터네트워크
    웹사이트
    d3
    mysql
    Jiraynor Programming
    자바
    React
    SWEA
    리액트
    AWS
    클론 프로젝트
    알고리즘
    spring boot
    강의내용정리
    플러터
    Til
    공식문서
    프로젝트
    ZeroCho
    bfs
    포트폴리오
    백준
    자바스크립트
    파이썬
    타입스크립트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[유데미 | winterlood 이정환] 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 강의 내용 정리 (섹션 2 ~ 섹션 7)
상단으로

티스토리툴바