ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [React] 강의
    FrontEnd/React 2022. 6. 16. 16:51

    React.js

    • 모바일 앱 : 반응이 빠르고 화면 전환이 원활 -> 앱 사용 편리함
    • 웹 사이트 : 링크나 버튼을 누르면 그 요청이 서버로 전송되고 서버로부터 얻어진 html 문서를 불러오는 데 시간이 소요되기 때문에 오래 걸림



    자바스크립트

    개발자들이 브라우저에서 어떤 로직을 수행할 수 있게 해준다. 사용자들이 화면에서 보는 것들을 조작할 수 있음 (DOM) DOM을 자바스크립트로 조작할 수 있음 (새로운 HTML 문서를 불러올 필요가 없음)

    리액트

    : 클라이언트 사이드의 자바스크립트 라이브러리


    자바스크립트 대신 리액트를 사용하는 이유

    • 자바스크립트
      모든 단계를 일일히 코드로 작성해야 함 -> 반복작업으로 인한 시간 소요, 간단한 기능을 구현하는데에 자바스크립트 코드가 길어질 수 있음 여러 개의 요소가 존재할 경우 잘못된 동작(혼란스러움)이 발생할 수 있음
    • 리액트
      복잡한 사용자 인터페이스 작업을 더 쉽게 구축할 수 있도록 함



    Single Page Application

    리액트로 화면에 보이는 모든 것들과 페이지 전환까지 제어 화면에 보여질 요소를 리액트로 바꿔주는 것(?)



    React 대체 가능한 프레임워크 or 라이브러리

    React.js

    • 컴포넌트 기반의 UI 라이브러리로 컴포넌트 주목, 내장된 다른 기능 X
      -> 라우팅같은 기능 필요하다면 서드파티 라이브러리 추가로 다운 받아야 함
    • 컴포넌트가 무엇이고 어떻게 생성하는지, 이 컴포넌트를 렌더링하여 화면에 사용자 인터페이스로 나타내는 방법

    Angular

    • 컴포넌트 기반의 UI 프레임워크 (리액트처럼) 타입스크립트 수용(작은 프로젝트에는 과하다 -> 내장 기능이 많음)
    • 앵귤러와 리액트는 다른 방식으로 컴포넌트를 구축한다.

    Vue.js

    • React와 Angular 사이에 위치 기능 : 앵귤러보다 적고, 리액트보다 많음
    • 라우팅 기능 有(커뮤니티 의존성 낮음)지만 앵귤러보다 과하지는 않음

     

     

     

     

    React 프로젝트 만들기

    프로젝트 생성, create-react-app



    리액트 server 작동

    -> 개발 시 에러를 잡을 수 있음




    리액트 작동 방식

    index.js : 최초의 코드 js 내의 html 코드는 빌드 단계를 통해서만 사용 가능 = jsx 코드(html code in js)

    ReactDOM.render(<App />, document.getElementById("root"));

    : App.js에서 import render(A, B) : A 요소(App)가 B에 렌더링 되게 만듦

    • 리액트는 하나의 html 문서로 여러 페이지를 보여주도록 만든다. 리액트가 그 html 내의 요소를 여러 부분에 렌더링 되도록 제어
    • (사용자 지정 요소)은 결국 함수인데, 이 함수는 대개 html 코드(jsx 코드)를 return 한다. 사용자 지정 요소(= 리액트 컴포넌트 = jsx를 return 하는 함수)는 브라우저에 의해 렌더링되지 않지만 이 요소가 반환하는 요소를 렌더링한다고 생각하면 된다.



    컴포넌트 작업

    • jsx로 작업하면 사용자 지정 요소 외에도 html 표준 요소를 사용할 수 있다.
    • HTML class는 자바스크립트 className와 같기 때문에 자바스크립트를 기본으로 하는 리액트에서도 className으로 class 속성을 지정해주어야 한다.



    컴포넌트 빌드 및 재사용

    • 자바스크립트는 같은 기능을 가진 요소를 만들기 위해 중복된 코드를 작성해주어야 하며, 요소들의 수정을 위해서는 여러 부분을 수정해야 한다.
    • 이러한 부분을 보완하기 위해 리액트의 컴포넌트 빌드 및 재사용을 알아야 한다.
    • 만들어진 컴포넌트(App 제외) js 파일들은 별도의 디렉토리에 저장 -> src\components
    • 컴포넌트(함수)를 export하여 외부에서도 컴포넌트를 사용할 수 있도록 한다.
    • 컴포넌트 = 함수는 대문자로 시작 -> 사용자 정의 html 요소로 사용하기 위해 대문자로 시작하도록 한다. -> 리액트 내장 기능 중 표준 html 요소와 구분하는 방법이 첫 문자의 대소문자로 구별하는 것이기 때문
    • 컴포넌트를 요소로 바꾸어 사용하는데 이때 요소의 내용이 없는 요소를 closing하기 위해서는 <태그 /> 와 같이 슬래쉬(/)로 닫아주어야 한다.

     

    컴포넌트마다 다른 속성 부여 : props

    • props는 리액트 개념에서 자바스크립트 객체이다.
    • 속성(key)-값(value)으로 이루어진다. (like html element property -> ex. type="text")
    • props를 이용해 외부(컴포넌트가 렌더링된 곳 = App)로부터 데이터를 받아 출력할 수 있다.
    • 중괄호({})를 이용해 속성값을 출력할 수 있다.

     

    이벤트 처리

    • 자바스크립트에서는 이벤트리스너 사용 (명령형 접근)
    • 리액트는 선언형 접근(목표 결과를 기술)을 하기 때문에 사용 불가
    • 결국 컴포넌트(함수) 내부에 존재하는 html 요소들은 모두 컴포넌트들이다.
    • ex. onClick 속성을 컴포넌트에 추가하면 리액트에게 클릭 이벤트에 반응하라는 선언

     

    여러 컴포넌트 추가

    • 컴포넌트는 되도록 적은 태그들을 사용하여 작은 부분으로 쪼개어 js 파일에 생성 (유지 보수 굳, 간단)
    • div(closing tag가 있는 요소) 내부에 content가 없을 경우 <div /> 와 같이 단일로 태그를 닫아줄 수 있다.

     

    상태에 따른 동작 부여 (동적 페이지 만들기!)

    import { useState } from 'react';
    • 컴포넌트의 상태에 따라 동작하도록 만들기 위해 react 라이브러리에 내장된 useState 함수 사용
    • useState를 사용하면 현재 app에서 사용하고자 하는 상태를 등록할 수 있다.
    • 리액트는 현재 활성화된 상태에 따라 다른 결과물을 렌더링할 수 있게 해준다.
    • useState(true or false)
    • useState는 항상 배열을 리턴하는데 이 배열의 element는 항상 두 개이다.
    • 두 개의 원소를 상수에 저장하거나 []에 저장(value 2개를 저장할 수 있는 js의 기능)

     

    리액트 훅

    • 컴포넌트 함수나 커스텀 훅 안에서 바로 호출되어야 한다.
    • 자세한 것은 나중에, 그저 리액트 훅을 컴포넌트 함수 내에서 사용할 수 있다는 것만 알아두기!

     

    State 사용하기

    ex. Modal 창의 상태 설정

    const [ modalIsOpen, setModalIsOpen ] = useState(false);​
    • useState의 value는 변경 가능
    • 첫 번째 함수 modalIsOpen의 상태가 useState() 안에 들어감
    • 두 번째 함수 setModalIsOpen은 state 값을 변경할 수 있게 하는 함수
    • setModalIsOpen 함수를 호출할 때마다 리액트가 state가 속한 컴포넌트 함수를 재실행해서 코드를 재검증함, 화면에 렌더링된 내용 업데이트

     

    상태를 이용해 컴포넌트(요소) 제어

    삼항 연산자

    • modalIsOpen의 상태가 true일 때, Modal 컴포넌트를 화면에 출럭
    { modalIsOpen ? <Modal> : null }

    함수

    • && 연산자를 이용하여 두 변수(?)가 모두 true 값을 가지면 화면에 출력
    { modalIsOpen && <Modal />}

     

    Event Props

    • 사용자 정의 컴포넌트는 event 정의를 따로 해주어야 한다. (props가 설정되지 않았기 때문에)
    • 컴포넌트 함수에 추가하여 정의
    1. 내장 html 요소 (ex. button, div, ...)
    2. 사용자 정의 컴포넌트 : 컴포넌트 함수에 매개변수로 props를 받아주고, 원하는 property를 정의해준다. 컴포넌트 함수에서 return 하는 요소들은 모두 html 요소이므로 내장된 컴포넌트이며, 이 컴포넌트는 props가 정의되어 있다.
      • props를 통해 받은 컴포넌트(실제 backdrop)의 prop를 컴포넌트 함수에서 onClick 속성으로 전달해준다.
      // Backdrop.js function Backdrop(props) { return <div className="backdrop" onClick={props.onClick} />; } // 사용하는 js 파일 ... <Backdrop onClick={closeModalHandler} />
      • backdrop을 사용하는 js 파일 내의 코드에서 backdrop 컴포넌트가 onClick prop를 호출하면 closeModalHandler가 props.onClick으로 전달된다.
      • 컴포넌트 함수에서 실제 backdrop 컴포넌트를 전달받아 정의한 onClick을 처리한다.

     

    Single Page Application

    • 한 페이지에 여러 컴포넌트가 존재하는 SPA이지만, 실제 사용자들은 다른 페이지로 이동하는 것처럼 느낌 -> 사용자들이 페이지 로딩을 기다리지 않아도 됨 (빠르다.) => 라우팅 추가

     

     

    (2022-06-26)

    라우팅

    • URL에 기초하여 화면에 보이는 내용을 변경해 줌
    • 라우팅을 이용하면 사용자들이 여러 페이지 사이를 이동하는 것이라고 착각하게 만든다.(?)
    • 라우팅 : URL 변화를 감지하여 어떤 컴포넌트를 어떤 경로, url에 로딩할지 인지하도록 하여 페이지를 이동시킨다.

     

    라우팅 방법

    import { BrowserRouter } from 'react-router-dom';
    • BrowserRouter도 컴포넌트이기 때문에 (사용자 정의?) html 요소로 사용할 수 있음
    ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root'));
    • 비html 요소로도 감쌀 수 있음

     

    라우터 패키지 초기화 (App 컴포넌트에서)

    • 라우터가 <App /> 을 인식하고 url을 감지하게 함
    • 지원하고자 하는 url을 정의하고 각 url별로 어떤 페이지를 로딩할지 결정

    'FrontEnd > React' 카테고리의 다른 글

    [React] Route, Routes 에러  (0) 2022.06.26

    댓글

Designed by Tistory.