<< 학습 목표 >>

1. 컴포넌트를 호출 할 때 컴포넌트로 값을 전달할 수 있다.

2. props에 대해서 설명할 수 있다.

3. props로 전달할 값을 올바르게 표현할 수 있다.

4. 컴포넌트의 이름이 대문자로 시작해야하는 이유를 설명할 수 있다.


JS에서 함수를 선언할 때 매개변수를, 호출 할 때는 인자를 넣어서 함수로 값을 전달 할 수 있음

 

리엑트의 컴포넌트도 선언할 때 매개변수를, 호출 할 때는 인자를 넣어서 함수로 값을 전달 할 수 있음

전 글에서 도서 3권의 정보를 출력하기 위해 각 도서 정보를 갖고 있는 컴포넌트를 만들었는데 이번에는 한 컴포넌트를 사용해 3권의 도서 정보를 출력해보자

 

프로젝트 -> src -> chapter02 -> SomeBook.jsx 파일을 추가하고 아래 코드를 입력하자

import React from 'react'

function SomeBook(param) {
    return (
        <div>
            <h1>도서명 : {param.name}</h1>
            <h2>저자 : {param.author}</h2>
            <h3>출판사 : {param.publisher}</h3>
            <hr/>
        </div>
    );
}

export default SomeBook;

 

이제 이 컴포넌트를 불러와 화면에 출력할 수 있게 App 컴포넌트를 추가하자

 

프로젝트 -> src -> chapter02 -> App1.js 파일을 추가하고 아래 코드를 입력하자

import React from 'react';
import SomeBook from './SomeBook';

function App() {
    let book1 = {
        "name": "소플의 처음만난 리액트",
        "author": "이인제",
        "publisher": "한빛미디어"
    };

    let book2 = {
        "name": "리액트를 다루는 기술",
        "author": "김민준",
        "publisher": "길벗"
    };

    let book3 = {
        "name": "한 입 크기로 잘라 먹는 리액트",
        "author": "이정환",
        "publisher": "인사이트(insight)"
    };

    return(
        <div>
            {SomeBook(book1)}
            <SomeBook name={book2.name} author={book2.author} publisher={book2.publisher} />
            <SomeBook name={book3.name} author={book3.author} publisher={book3.publisher} />
        </div>
    );
}

export default App;

 

App1.js 파일에서 컴포넌트를 호출 할 때 권장하지 않는 방식(1)과 권장하는 방식(2)을 혼합해서 사용했음

 

권장하지 않는 방식은 컴포넌트를 함수처럼 호출하는 것이므로 함수를 호출 할 때 인자를 넣듯이 컴포넌트로 전달할 값을 넣을 수 있음

 

권장하는 방식은 함수 호출과는 완전히 다른 방식임

권장하는 방식을 사용해서 컴포넌트로 값을 전달할 때는 값만 전달하면 안되고 전달할 값의 이름도 함께 지정(3)해야함

 

권장하는 방식을 사용해서 컴포넌트로 값을 전달하면 다음과 같이 JSON에 담겨서 컴포넌트의 매개변수로 전달 됨

 

컴포넌트로 값이 잘 전달됬는지 App 컴포넌트를 출력해 확인해보자

프로젝트 -> src -> index.js 를 다음과 같이 수정하고 프로젝트를 실행시켜보자

 

3권의 도서 정보가 출력되는걸 확인할 수 있음


컴포넌트의 매개변수 이름은 일반적으로 props 로 지어줌

앞으로는 컴포넌트의 매개변수 이름을 props 로 짓겠음

SomeBook 컴포넌트의 매개변수 이름을 props로 바꾸자

 

또한 컴포넌트의 매개변수 라는 말을 이제부터 props 라고 부르겠음


props로 전달 할 수 있는 데이터의 형태는 다양함

정수, 실수, 문자열, 논리값은 물론이고 JSON, 심지어는 컴포넌트도 전달할 수 있음

 

적절한 형태는 아니지만 SomeBook 컴포넌트의 props 로 다음과 같이 다양한 형태의 데이터를 보내보자

프로젝트 -> src -> chapter02 -> App2.js 를 추가하고 아래 코드를 추가하자

import React from 'react';
import SomeBook from './SomeBook';

function App() {
    let data = {
        "name": "value"
    };

    return(
        <div>
            <SomeBook name={1} author={3.14} publisher="한빛미디어" />
            <SomeBook name={true} author={data} publisher={<div>한빛미디어</div>} />
        </div>
    );
}

export default App;

 

이 컴포넌트는 출력할 수 없으니 코드만 보자

props로 값을 전달 할 때 문자열 외에 모든 형태의 데이터는 { } 안에 표현했음

문자열도 { } 안에 표현해서 {"한빛미디어"} 와 같이 표현할 수 있지만 중괄호를 생략해도 되니 일반적으로 props로 문자열을 전달 할 때는 { } 를 생략함

문자열 외에 모든 형태의 데이터는 반드시 { } 안에 표현해야함


props의 중요한 특징은 읽기 전용(Read-Only) 라는 것임

읽기 전용이라는 것은 props에 저장된 값을 사용할 수만 있고 props에 저장된 값을 바꾸면 안된다는 것

 

SomeBook 컴포넌트에서는 props에 저장된 값을 사용하기만 하고 저장된 값을 바꾸진 않고 있음

 

만약 왼쪽처럼 컴포넌트의 props 값을 바꾸려고 한다면 웹 페이지에는 무시무시한? 에러 페이지가 보이게됨

 

컴포넌트 안에서는 전달 받은 값을 절대 바꾸면 안되지만 어쩔 수 없이 바꿔야한다면 다음과 같이 우회할 수 있음


마지막으로 컴포넌트 이름에 대해서 알아보자

앞서 컴포넌트 기초 ( https://codingaja.tistory.com/72 ) 에서 컴포넌트 이름은 반드시 대문자로 시작해야한다고 했음

컴포넌트 이름이 왜 대문자여야 하는지 알아보자

 

아래 코드에서 el1과 el2에 무언가를 저장하고 있음

el1에는 HTML의 br 태그를 저장하고 있고 el2에는 welcome 컴포넌트가 반환한 태그를 저장하고 있는 것임

나는 어떻게 구분했을까? HTML에는 welcome 이라는 태그가 없으므로...

import React from 'react';

function App() {
    let el1 = <br />
    let el2 = <welcome />

    return(
        <div>
            {el1}
            {el2}
        </div>
    );
}

export default App;

 

이렇게 컴포넌트명이 소문자로 시작하면 이 코드가 HTML 태그를 나타내는 코드인지 컴포넌트를 호출하는 코드인지 구분할 수 없게 됨

그래서 컴포넌트를 호출하는 코드임을 확실히 파악하기 위해 컴포넌트명의 첫 글자를 대문자로 지어주는 것임


정~말 마지막으로 컴포넌트는 반드시 태그를 반환해야함

태그를 반환하지 않는 컴포넌트를 호출하면 화면에 NaN 으로 출력됨

 

만약 태그를 반환하지 않는 컴포넌트를 만들었다면 JS 함수로 바꿔야함

JS의 함수로 바꾼다는건?

이름의 첫 글자를 소문자로 바꾸고 호출할 때도 {함수명()} 으로 호출해야함

728x90
LIST

<< 학습 목표 >>

1. 프로젝트 내 컴포넌트들의 구조를 그릴 수 있다.

2. import 키워드에 대해서 설명할 수 있다.

3. export 키워드에 대해서 설명할 수 있다.


JSX와 컴포넌트 기초를 다지는 시간을 가져보자

 

지금 우리 프로젝트에서 화면에 컨텐츠가 보이는 구조와 과정은 다음과 같음

1. index.js 에서 화면에 보여줄 컴포넌트를 불러옴

2. 컴포넌트를 화면에 출력할 id가 root 태그를 불러옴

3. (2)에서 불러온 태그에 (1)에서 불러온 컴포넌트를 출력함


3권의 도서 정보를 출력하는 웹 페이지를 JSX와 컴포넌트 기초에서 배운 내용으로 만들어보자

이 웹 페이지의 구조는 다음과 같이 만들 것

 

먼저 각 도서의 정보를 출력할 컴포넌트를 만들자

3권의 도서 정보를 출력할 것이므로 컴포넌트는 3개를 만들 것

프로젝트 -> src -> chapter02 -> Book1.jsx, Book2.jsx, Book3.jsx 를 추가하자

<< Book1.jsx >>

더보기

import React from 'react';

function Book1() {
    return (
        <div>
            <h1>도서명 : 소플의 처음만난 리액트</h1>
            <h2>저자 : 이인제</h2>
            <h3>출판사 : 한빛미디어</h3>
            <hr/>
        </div>
    );
}

export default Book1;

 

<< Book2.jsx >>

더보기

import React from 'react';

function Book2() {
    return (
        <div>
            <h1>도서명 : 리액트를 다루는 기술</h1>
            <h2>저자 : 김민준</h2>
            <h3>출판사 : 길벗</h3>
            <hr/>
        </div>
    );
}

export default Book2;

 

<< Book3.jsx >>

더보기

import React from 'react';

function Book3() {
    return (
        <div>
            <h1>도서명 : 한 입 크기로 잘라 먹는 리액트</h1>
            <h2>저자 : 이정환</h2>
            <h3>출판사 : 인사이트(insight)</h3>
            <hr/>
        </div>
    );
}

export default Book3;

 

App.js 에서 각 컴포넌트를 불러와 출력하도록 하자

기존에 있던 App.js 는 사용하지 않고 Chapter02 안에 App.js 를 추가해 App 컴포넌트를 추가할 것

import React from "react";
import Book1 from "./Book1";
import Book2 from "./Book2";
import Book3 from "./Book3";

function App() {
    return (
        <div>
            <Book1 />
            <Book2 />
            <Book3 />
        </div>
    );
}

export default App;

 

이제 마지막으로 index.js 파일 내 코드를 다음과 같이 정리(1)하고 App 컴포넌트를 불러오자(2)

 

이제 리엑트 프로젝트를 실행시키면 다음과 같이 3권의 도서 정보가 출력됨


앞으로 각 글에서 실습할 때는 Book1, Book2, Book3처럼 별도의 컴포넌트를 생성해 실습할 것임

각 글에서 실습한 것들을 확인하기 위해서 챕터별 폴더 안에 App.js 를 추가해 실습한 컴포넌트를 App.js가 불러오도록 할 것임

App.js 파일 이름은 App1.js, App2.js 처럼 App(number).js 로 지을 예정

index.js 에서는 Chapter02에서 실습한 걸 확인하기 위해 챕터별 폴더 안에 App(number).js 를 불러와 App 컴포넌트를 호출해 실습한 것들을 화면에 출력할 것

 

말로 들으면 어렵지만 한, 두번 해보면 어렵지 않을 것


컴포넌트에 반복적으로 사용한 import, export에 대해서 알아보자

Book1 컴포넌트와 App 컴포넌트를 통해 import, export에 대해서 단계적으로 알아보자

 

<< Book1 컴포넌트 >>

컴포넌트 마다 첫번째 줄에 (1) 이 있는데 이는 "이 파일 안에서 리엑트 코드를 쓰겠다" 임

이를 생략해도 상관 없는데 이를 생략하면 프로젝트가 실행될 때 (1) 이 자동으로 추가됨

즉, 리엑트 코드를 사용하려면 반드시 추가해야함

자동으로 추가되니 생략해도 상관은 없지만 왠만하면 수동으로 직접 추가해주는게 좋음

 

컴포넌트 마다 마지막 줄에 (2) 가 있는데 이는 "다른 파일에서 Book1 컴포넌트를 import 할 수 있게 해주겠다" 라는 것

따라서 컴포넌트 마지막 마다 반드시 추가해야함

 

<< App 컴포넌트 >>

컴포넌트를 불러올 때(1)는 반드시 ./ 부터 시작해야함

./ 는 현재 위치를 뜻하는 기호임

 

컴포넌트를 불러올 때 파일의 확장자는 생략함

 

컴포넌트를 불러오는 코드를 우리말로 해석해보면 현재 위치의 Book1.jsx 파일 내 컴포넌트를 불러오는데(1) 그 컴포넌트 명을 이 파일에서는 Book1 으로 사용하겠다(2) 임

아래 그림의 왼쪽에 App.js 에서 import Book1 이라고 했으므로 from으로 불러온 컴포넌트를 App.js 에서는 Book1 으로 사용하겠다는 것

 

 

만약 아래 그림의 왼쪽에 App.js 처럼 import Abc 라고 한다면 from으로 불러온 컴포넌트를 App.js 에서는 Abc 로 사용하겠다는 것이 됨

 

일반적으로는 처음의 App.js처럼 컴포넌트의 원래 이름과 import 해서 사용할 이름을 맞춰줌

728x90
LIST

'JS + React > React-Chapter01' 카테고리의 다른 글

Chapter01. 리엑트 프로젝트 분석  (0) 2023.03.29
Chapter01. 리엑트 프로젝트 만들기  (0) 2023.03.28
Chapter01. 리엑트 설치하기  (0) 2023.03.28
Chapter01. 리엑트란?  (0) 2023.03.28

<< 학습 목표 >>

1. 리엑트 컴포넌트의 JS 함수를 구분할 수 있다.

2. 리엑트 컴포넌트를 권장하는 방식으로 호출할 수 있다.

3. 리엑트 컴포넌트를 분리해 작성할 수 있다.

4. 분리되어있는 리엑트 컴포넌트를 불러올 수 있다.


리엑트는 화면에 보여줄 요소를 컴포넌트라고 부른다고 했음

우리가 지금까지 화면에 보여주기 위해서 어디를 수정했는지??

 

프로젝트(1) 내 App.js 파일(2)을 수정했고

App.js 파일 안에서도 App 함수(3) 에 코드를 이렇게 저렇게 수정해 화면에 출력했음

 

(3) 은 JS의 함수로 이름이 App인 함수를 선언한 것인데 리엑트가 적용된 프로젝트에서 첫 글자가 대문자인 함수를 리엑트 컴포넌트라고 부름

 

JS 함수와 리엑트 컴포넌트는 이름외에도 큰 차이가 있음

태그를 반환하지 않는 것을 JS 함수 라고 부르고

태그를 반환하는 것을 리엑트 컴포넌트라고 부름

App.js 파일 내에서 함수와 컴포넌트를 구분지어보자

더보기

 

그래서 사실 getH1 는 이름이 잘못됬음

컴포넌트는 대문자로 시작해야한다고 했으므로 GetH1 으로 이름을 바꿔야함



함수 안에서 또 다른 함수를 호출할 수 있는 것처럼 컴포넌트 안에서 또 다른 컴포넌트를 호출할 수 있음

App 컴포넌트를 보면 App 컴포넌트 안에서 getH1 컴포넌트를 호출하고 있음

이렇게 컴포넌트는 또다른 컴포넌트를 호출할 수 있음


이제부터 본격적으로 리엑트를 시작할텐데 실행 중인 리엑트 프로젝트를 중지 시키고 학습을 위한 프로젝트를 만들자

리엑트 프로젝트를 중지 시키면 터미널 창의 경로가 다음(1)과 같을 것

 

이 상태로 리엑트 프로젝트를 생성하면 first-project 안에 또 다른 리엑트 프로젝트가 만들어지는 것

상위 폴더로 이동해 학습을 위한 리엑트 프로젝트를 만들자

 

터미널 창에서 상위 폴더로 이동하려면 cd .. 명령을 입력하면 됨

이동 후 이름이 study-project 인 프로젝트를 만들자

( npx create-react-app study-project )


이전 프로젝트처럼 App.js 파일 안에 컴포넌트를 추가하고 App 컴포넌트의 return에서 컴포넌트를 호출하는 방법이 있지만 컴포넌트를 별도의 파일로 분리해 컴포넌트를 호출할 수도 있음

 

또한 컴포넌트 안에서 컴포넌트를 호출할 때는 함수 형태로 호출 할 수도 있지만 또 다른 형태로 컴포넌트를 호출 할 수 있음

 

먼저, 지금까지 한 첫 번째 방식으로 컴포넌트를 호출해보자

방금 만든 프로젝트 -> src -> App.js 파일 내 불필요한 코드를 전부 지우자

 

컴포넌트가 작다면 한 파일(App.js)에 컴포넌트들을 추가하고 컴포넌트를 호출하면 됨

또한 컴포넌트를 호출하는 방법은 2, 3과 같이 두 가지 방법이 있음

컴포넌트를 호출할 때는 되도록 3번의 방법으로 호출해야함

JS 함수를 호출할 때는 2번의 방식으로만 호출할 수 있음

 

이번에는 별도의 파일에 컴포넌트를 추가하고 App.js에서 컴포넌트를 불러와 호출해보자

 

먼저 chapter02에서 배운 것들을 모아 저장할 chapter02 폴더를 추가하자

프로젝트 -> src 폴더 우클릭(1) -> 새 폴더(2) 클릭 -> 폴더 이름을 chapter02 로 지정(3) 

 

chapter02 폴더 안에 컴포넌트를 갖고 있을 파일을 추가하자

chapter02 폴더 우클릭(1) -> 새 파일(2) 클릭 -> 파일 이름을 Component2.jsx 로 지정(3)

 

여기까지 왜 왔는지 다시 한번 떠올려 보면 이전 프로젝트처럼 App.js 파일 안에 컴포넌트를 추가하고 App 컴포넌트의 return에서 컴포넌트를 호출하는 방법이 있지만 컴포넌트를 별도의 파일로 분리해 컴포넌트를 호출할 수도 있다고 했음

그래서 << 하나의 파일에 컴포넌트를 추가 >> 하고 컴포넌트를 호출하는 두 가지 방법을 봤음

그 중에 컴포넌트는 되도록이면 두 번째 방법으로 호출하라고 했음

 

이번에는 << 컴포넌트를 별도의 파일로 분리 >> 하기 위해 chapter02 폴더를 만들고 그 안에 Component2.jsx 파일을 만든 것

파일의 확장자가 jsx 인 것은 이 파일에 리엑트 코드를 넣을 것이기 때문...

리엑트는 JS 라이브러리이므로 파일의 확장자를 js로 해도 무관함

 

Component2.jsx 파일 안에 아래와 같이 코드를 추가하자(1)

그 후 App.js에서 Component2.jsx 파일을 불러와(2) Component2 컴포넌트를 호출(3)해보자


이것저것 왔다갔다 복잡한걸 배운듯 하지만 컴포넌트 맛보기였음

 

컴포넌트를 생성하는 방법은 두 가지가 있음

1. App.js 에 컴포넌트들을 생성

2. 별도의 파일에 컴포넌트들을 생성

 

App.js에 컴포넌트들을 생성했을 경우 당연히 별도의 불러오는 과정없이 App.js에서 바로 호출 할 수 있음

별도의 파일에 컴포넌트들을 생성했을 경우 App.js 에서 컴포넌트를 불러와 호출할 수 있음

 

컴포넌트를 호출하는 방법은 두 가지가 있음

1. 함수 방식으로 컴포넌트 호출

2. 리엑트 고유의 방식으로 컴포넌트 호출

 

컴포넌트는 리엑트에서 사용하는 것이므로 2번의 방법인 리엑트 고유의 방식으로 컴포넌트를 호출하길 권장함


마지막으로 별도의 파일에 컴포넌트들을 생성했을 때 굳이 App.js 를 통해 호출하지 않고 곧바로 index.js 에서 컴포넌트들을 불러와(1) 호출(2)할 수도 있음

728x90
LIST

<< 학습 목표 >>

1. JSX를 사용할 수 있다.


리엑트는 JS 라이브러리이므로 JS코드와 리엑트 코드가 혼합되어있음

노란 밑줄이 그어진 코드는 JS 코드이고

주황 밑줄이 그어진 코드는 리엑트 코드임

 

let element = <h1>Hello React!</h1>;

위 코드는 element 변수를 선언한 후 element 변수에 h1 태그를 저장한 것으로 리엑트의 JSX가 적용된 코드임

JS만 사용했다면 위 코드는 문법에 어긋난 코드임

 

JSX는 A syntax extension to JavaScript 를 뜻하는 말로 우리말로 번역하면 자바스크립트 확장 문법임

자바스크립트의 문법에 리엑트 문법을 더 할 수 있음


JSX코드는 실제 웹 사이트가 동작할 때 JS 코드로 변환됨

JSX를 JS 코드로 변환 시켜주는 건 리엑트의 createElement 함수가 함

 

createElement 함수는 중요하지 않으므로 "이런게 있구나" 정도로만 기억하면 됨


JSX를 사용하면 많은 장점이 생기지만 가장 큰 장점은 Injection Attack을 방어할 수 있다는 점이라고 생각함

Injection Attack 이란 사용자가 입력한 값을 JS에서 사용한다는 점을 이용해 사이트를 해킹하는 기법임

왼쪽의 이미지와 같이 네이버에 로그인할 때 일반적인 사용자는 아이디, 비밀번호를 입력함

그러나 해커는 아이디, 비밀번호를 JS에서 사용해 로그인 처리를 한다는 점을 파악하고 JS에서 실행 가능한 코드를 넣어 서비스를 해킹하려고 시도할 수 있음

해커의 이런 방식을 Injection Attack 이라고 하며 JSX를 사용해서 사용자가 입력한 아이디, 비밀번호를 가져온다면 해커가 입력한 실행 가능한 코드가 실행되지 않도록 막아줌


지금까지는 JSX에 대한 서론, 설명이었고 여기서부터가 본론인 JSX를 사용하는 방법임

그러나 굉장히 간단함

 

우리는 이미 지난 Chapter에서 JSX를 사용했었음

 

App 함수를 선언(1)했는데 이는 JS 문법임

JS는 아래처럼 HTML을 직접 반환할 순 없고 문자열로 반환해야함

App 함수가 HTML을 직접 반환할 수 있는 이유는 JSX를 사용(2)했기 때문

 

변수를 JSX로 사용해보자

변수를 선언(1)하고 JSX를 사용해 변수를 사용(2) 할 수 있음

 

리엑트 프로젝트를 실행시켜보자

우리가 text 변수에 저장했던 문자열이 출력된 화면을 볼 수 있음

더보기

리엑트 프로젝트를 실행시키는 방법이 기억 나지 않으면 https://codingaja.tistory.com/70 글을 보자

 

변수 선언(1)은 JS 코드로만 이루어져있고 변수에 저장한 값을 h1 태그에 넣기 위해 JSX를 사용(2)한 것임

이렇게 JSX의 {변수명} 을 사용하면 변수가 가지고 있는 값을 사용함

 

JSX에서 객체를 활용할 수있고 함수를 호출할 수도 있음

 

JSX는 App 내에서 뿐만 아니라 JS 코드 어디든 사용할 수 있음

왜? JSX의 X가 (extention) 이므로...

 

여기까지가 JSX의 끝~!

간단하지만 JS를 잘모른다면 JS와 JSX의 차이, JSX를 어떻게 활용해야하는지 알 수 없음

JS가 부족하다 생각된다면 JS 공부도 함께 병행해야함

728x90
LIST

<< 학습 목표 >>

1. 리엑트 프로젝트를 실행시킬 수 있다.

2. 리엑트 프로젝트를 종료시킬 수 있다.


리엑트 프로젝트를 실행시키려면

1. 실행 시킬 리엑트 프로젝트를 vs code로 직접 열거나

2. 실행 시킬 리엑트 프로젝트를 포함하고 있는 상위 폴더를 vs code로 열어야함

 

vs code에서 프로젝트 또는 폴더를 열 때는 vs code 내 상단 [ 파일 ] (1) -> [ 폴더 열기 ] (2) 후 해당 폴더를 선택하자

 

그 다음 vs code 내에서 터미널 창을 열어야함

터미널 창을 열려면 vs code 내 상단 [ 터미널 ] (1) -> [ 새 터미널 ] (2) 클릭

 

그럼 vs code 하단에 터미널 콘솔(1)이 열렸을 것

 

이제 터미널에서 리엑트 프로젝트를 실행시키는 명령을 입력하면 되는데

1. 실행시킬 리엑트 프로젝트를 직접 열었다면 바로 리엑트 프로젝트를 실행시키는 명령을 입력하면 됨

2. 실행 시킬 리엑트 프로젝트를 포함하고 있는 상위 폴더를 열었다면 터미널 창 내에서 실행시킬 리엑트 프로젝트로 이동 후 리엑트 프로젝트를 실행시키는 명령을 입력하면 됨

 

즉, 리엑트 프로젝트로 이동 후 리엑트 프로젝트를 실행 시키냐 곧바로 리엑트 프로젝트를 실행시키냐의 차이

 

터미널 창에서 명령을 실행시킬 때는 엔터키를 눌러야함

 

실행시킬 리엑트 프로젝트로 이동할 때는 cd (프로젝트) 명령으로 이동할 수 있음

cd 명령을 사용해 실행시킬 리엑트 프로젝트로 이동했음(1)

터미널의 경로(2)를 보면 실행시킬 리엑트 프로젝트로 이동한 걸 알 수 있음

 

리엑트 프로젝트를 실행시키는 명령은 npm start 임

해당 명령을 입력하고 잠시 기다리면 리엑트 페이지가 열리는걸 볼 수 있음


리엑트 프로젝트를 종료하고 싶을 때는 vs code를 끄면 되지만 또 다른 방법으로는 vs code의 터미널 창을 한번 클릭 한 후 Ctrl + C 를 누르면 됨

그럼 [ 일괄 작업을 끝내시겠습니까? (Y/N)? ] 메세지(1)가 나오는데 Y 입력 후 엔터키를 누르면 리엑트 프로젝트가 종료됨

728x90
LIST

<< 학습 목표 >>

1. 프로젝트 내 컴포넌트를 출력하는 태그를 찾을 수 있다.

2. 프로젝트 내 컴포넌트를 불러오는 JS 파일을 찾을 수 있다.

3. 프로젝트 내 컴포넌트를 찾을 수 있다.


웹 프로젝트 내 웹 페이지는 각자의 웹 페이지가 있지만

리엑트 웹 프로젝트 내 웹 페이지는 하나뿐임

그래서 SPA(Single Page Application) 라고 부름

 

리엑트는 화면에 보여줄 요소(Element / 컨텐츠)를 컴포넌트라고 부름

페이지별 컨텐츠를 컴포넌트로 만들어두고 컴포넌트를 id가 root인 div에 출력하는 방식

 

결국 따져보면 일반 웹 페이지는 페이지별 컨텐츠를 HTML 페이지에 만들어두는 것이고 리엑트 웹 페이지는 페이지별 컨텐츠를 컴포넌트에 만들어두는 것

 

페이지냐 컴포넌트냐의 차이일 뿐 결국 프로젝트의 규모가 커지면 페이지가 많아지듯 컴포넌트가 많아짐

그러나 리엑트는 그 이상의 많은 장점이 있음

그 장점에 대해서는 리엑트의 제일 마지막에 얘기할 것


리엑트 프로젝트가 어떤 구조로 되어있길래 SPA가 가능한지 프로젝트 구조를 살펴보자

우리가 만든 프로젝트를 열어보면 가장 위에 다음과 같이 3개의 폴더와 몇개의 파일이 보임

 

여기서 public 폴더(1)를 열어보면 다음과 같이 하위 파일들이 있음

 

여기서 index.html 파일을 열어보면 위에서 언급했던 아이디가 root인 div 태그(1)가 있음

이 div를 통해 내가 만든 컴포넌트가 상황에 따라 출력됨

 

이번에는 src폴더(1)를 열어보면 다음과 같이 하위 파일들이 있고 그 안에 index.js(2) 가 상황에 맞는 컴포넌트를 아이디가 root인 div에 출력하는 역할을 함

 

index.js 파일을 열어 보면 아래와 같은 코드들이 보임

출력할 컴포넌트를 불러오는 코드(1)

컴포넌트를 출력할 id가 root인 태그를 불러오는 코드(2)

id가 root인 태그에 불러온 컴포넌트 출력(3)

 

App.js 파일(1)을 열어보면(2) return 안에 출력할 컨텐츠(3)가 보임

 

출력할 컨텐츠를 다음과 같이 바꾸면(3) 화면에는 Hello React! 가 보임


여기까지 리엑트 프로젝트의 구조를 알아봤음

 

화면에 보여줄 컨텐츠는 컴포넌트 라는 요소로 추가를 하고 index.js에서 컴포넌트를 불러와 상황에 맞는 컴포넌트를 호출하면는 구조임

 

또 A 컴포넌트에서 B 컴포넌트를 호출해 A 컴포넌트의 특정 부분을 B 컴포넌트로 채울 수 있음

리엑트는 웹 페이지를 마치 레고 블록 조립하듯 할 수 있게 해준다는 장점도 있음

728x90
LIST

'JS + React > React-Chapter01' 카테고리의 다른 글

Chapter02. 리엑트와 친해지기  (0) 2023.03.29
Chapter01. 리엑트 프로젝트 만들기  (0) 2023.03.28
Chapter01. 리엑트 설치하기  (0) 2023.03.28
Chapter01. 리엑트란?  (0) 2023.03.28

<< 학습 목표 >>

1. 프로젝트에 리엑트를 설치할 수 있다.

2. 리엑트 프로젝트를 생성할 수 있다.

3. 리엑트 프로젝트를 실행시킬 수 있다.


프로젝트를 생성하고 프로젝트에 리엑트를 설치할 수 있는 준비가 끝났음

프로젝트를 생성하고 프로젝트에 리엑트를 설치하자

 

전 글에서 언급했지만 리엑트는 프로젝트 마다 설치하는 것

그리고 리엑트는 npm 으로 설치함

 

npm으로 리엑트를 설치할 프로젝트를 지정하면 프로젝트가 생성되고 해당 프로젝트에 리엑트가 설치됨

괜히 말로 들으면 복잡하니 직접 실습해보자

 

우선 여러분의 컴퓨터 바탕화면 또는 어딘가에 리엑트 학습을 위한 폴더를 생성하자

그 후 vs code 내 상단 [ 파일 ] (1) -> [ 폴더 열기 ] (2) 후 해당 폴더를 선택하자

이제 리엑트 프로젝트를 생성하면 해당 폴더 안에 생성될 것


리엑트 프로젝트를 생성하기 위해 터미널을 열자

vs code 상단 [ 터미널 ] (1) -> [ 새 터미널 ] (2)

 

vs code 하단을 보면 [ 터미널 ] 콘솔(1)이 열렸을 것

터미널에 표시되는 경로를 주의 깊게 보자

터미널에 표시 되는 경로가 위에서 만든 폴더의 경로가 아니라면 위에서 폴더 선택이 되지 않은 것이니 다시 위 내용을 보고 폴더 선택을 하고 터미널 콘솔을 열여야함

 

터미널 콘솔에 [ npx create-react-app (프로젝트명) ] 명령을 입력하면 리엑트 프로젝트가 만들어짐

npx create-react-app first-project 명령을 입력해 리엑트 프로젝트를 생성하자

리엑트 프로젝트가 생성되는데 시간이 다소 소요되는데 그 이유는 해당 프로젝트에 리엑트를 설치하기 때문

 

! 여기서 알 수 있는 점 !

프로젝트를 생성하고 프로젝트에 리엑트를 설치한다고했는데 간단하게 위 명령을 입력해 프로젝트를 생성하고 프로젝트에 리엑트를 설치한 것

 

! 여기서 주의할 점 !

리엑트 프로젝트명에는 가급적 대문자가 들어가지 않는 것이 좋음

프로젝트 이름을 다른 이름으로 만든다면 대문자를 빼고 소문자로만 만들자

 

리엑트 프로젝트가 설치됬다면 아래와 같은 메세지가 보일 것


리엑트 프로젝트를 실행시켜보자

여기서 개발 경험이 있는 분들은 "프로젝트만 만들었지 그 안에 뭘 추가한건 아닌데?" 라고 생각할 수 있음

리엑트 프로젝트를 생성하면 샘플 페이지가 들어있기 때문에 프로젝트를 실행시키면 샘플 페이지가 보임

 

리엑트 프로젝트를 실행시키는 방법은 이미 알고 있음

리엑트 프로젝트를 생성하고 나온 메세지 중 이 메세지(1)가 리엑트 프로젝트를 실행시키는 메세지임

 

터미널 창에 먼저 cd first-project 입력 후 엔터

그 다음 npm start 입력 후 엔터를 쳐보자

 

잠시 기다리면 웹 페이지가 열리며 다음과 같은 화면이 보일 것


여기까지 리엑트 프로젝트를 생성하고 리엑트 프로젝트를 실행시켰음

 

리엑트 프로젝트를 생성하는 명령과 리엑트 프로젝트를 실행시키는 명령을 잘 기억해두자

728x90
LIST

'JS + React > React-Chapter01' 카테고리의 다른 글

Chapter02. 리엑트와 친해지기  (0) 2023.03.29
Chapter01. 리엑트 프로젝트 분석  (0) 2023.03.29
Chapter01. 리엑트 설치하기  (0) 2023.03.28
Chapter01. 리엑트란?  (0) 2023.03.28

<< 학습 목표 >>

1. node를 설치할 수 있다.

2. vs code를 설치할 수 있다.


게임을 하려면 게임을 설치해야하고 카카오톡을 하려면 카카오톡을 설치해야하는 것처럼 리엑트로 개발을 할것이기 때문에 리엑트를 설치해야함

리엑트는 npm 으로 설치해야하는데 npm 역시 설치해야함

npm은 별도로 설치할 수도 있지만 Node.js(이하 node)를 설치하면 같이 설치 되기 때문에 node를 설치하자

node는 JS로 SPA를 개발할 수 있게 해주는 환경이라고 생각하면 됨

 

인터넷에 node.js로 검색(1) 해 첫 번째 검색 결과(2)인 node 공식 홈페이지로 들어가자

검색 결과가 다르다면 주소창에 https://nodejs.org/en 를 직접 입력해도 됨

 

node 공식 홈페이지에 들어오면 바로 보이는 [ ~ LTS ] 를 선택(1)

LTS란 Long Term Support의 약자로 해당 버전을 장기간 지원해주는 버전임

이 글을 보는 시점에 따라 18.15.0 LTS가 아닐 수 있는데 이는 큰 의미는 없음

 

곧바로 설치 프로그램이 다운 받아지며 설치 프로그램을 다운 받아 실행시켜 설치하면 되므로 별도 이미지 첨부는 하지 않음

 

여기까지 리엑트를 설치하기 위해 node를 설치했음

 

리엑트 설치는 리엑트를 적용하고 싶은 프로젝트 마다 별도로 설치해야하므로 개발툴까지 설치 후 프로젝트를 만들 때 설치하겠음


이번에는 개발툴인 VS Code를 설치하자

지난 글에서 리엑트를 톱에 비유했는데 개발툴은 작업대 라고 할 수 있음

나무를 자르기 위해서 톱만 있어도 되겠지만 적절한 작업대 위에 나무를 올려두고 톱질을 한다면 톱질이 더 수월할 것

 

리엑트로 웹 페이지를 만들 수 있지만 VS Code 안에서 리엑트로 웹 페이지를 만들면 더 수월하게 만들 수 있음

 

인터넷에 vs code로 검색(1) 해 첫 번째 검색 결과(2)인 vs code 공식 홈페이지로 들어가자

검색 결과가 다르다면 주소창에 https://code.visualstudio.com/ 를 직접 입력해도 됨

 

vs code 공식 홈페이지에 들어오면 바로 보이는 [ Donwload for Windows ] 클릭(1)

그러면 페이지가 이동하지만 잠시 기다리면 vs code 설치 프로그램이 다운로드 됨

 

vs code 역시 다운로드 받은 설치 프로그램을 실행시켜 설치하므로 설치 과정은 생략함


vs code 를 실행시켜 보면 모두 영문임

한글 언어팩을 설치해 vs code를 한글화 하자

 

vs code 내 왼쪽에서 확장 프로그램 메뉴(1) 클릭 -> korean 으로 검색(2) -> 한글 언어팩 설치(3)

 

한글 언어팩을 설치한 후 vs code 를 껐다 키자

한글화가 됬을것

만약 한글화가 안됬다고 해도 문제는 전혀 없음

꼭 한글화를 하고 싶다면 인터넷에 검색을 해서 직접 찾아보자

 

728x90
LIST

<< 학습 목표 >>

1. 라이브러리를 설명할 수 있다.

2. SPA에 대해서 설명할 수 있다.


리엑트(React)는 JavaScript(이하 JS) 라이브러리(Library)임

프로그래밍에서 라이브러리는 철물점에 비유할 수 있음

 

나무를 잘라야하는데 톱이 없다면?

어떻게든 직접 나무를 자를 순 있겠지만 깨끗하게 잘리지 않고 자르는데 굉장히 오래 걸림

가장 효율적인 방법은 철물점 가서 톱을 사와 자르는 것임

철물점에 가는 시간, 톱을 사는 추가 비용이 발생하겠지만 효율적인 방법 중 하나임

 

프로그램을 개발하면서 어떤 기능이 필요하다면?

어떻게든 그 기능을 직접 만들 순 있겠지만 실수로 인해 기능상 문제가 있을 수 있고 만드는데 시간이 굉장히 오래 걸릴 수 있음

가장 효율적인 방법은 그 기능을 불러다 사용하는 것임

그 기능을 불러다 사용하기 위해서는 기능을 찾는 시간, 기능을 불러다 사용하기 위해 공부해야하는 시간과 수고가 발생하겠지만 효율적인 방법 중 하나임


웹 사이트의 규모가 커지면 웹 페이지가 굉장히 많아지게 됨

네이버를 예로 들어보자

네이버는 1차 메뉴만 봤을 때 메일부터 웹툰까지 그리고 이 외에도 굉장히 많은 메뉴가 존재함

각 메뉴 마다 페이지가 존재해야함

또 각 1차 메뉴 안에서 또 각 2차, 3차 메뉴가 있으므로 네이버 서비스의 페이지는 수백개가 넘을 것

(이 예는 저의 생각을 표현한 예시로 사실이 아닙니다)

 

이렇게 페이지가 점점 많아지는 불편함을 해결하기  위해 나온게 SPA(Single Page Application)임

SPA란 페이지가 하나만 있는 서비스로 페이지에서 보여줄 컨텐츠가 바뀌었을 때 웹 페이지를 다시 로드하지 않고도 보여줄 수 있는 기술임

 

SPA 기능을 사용하면 하나의 페이지에서 여러 컨텐츠를 보여줄 수 있음이 SPA 기능이 필요할 때 개발자가 직접 개발할 수 있겠지만 굉장히 시간이 오래 걸림몇 시간 정도가 아니라 몇 개월에서 평생이 걸릴 수 있음

 

이럴 때 SPA 라이브러리를 찾아 SPA 라이브러리를 공부하고 적용한다면 효율적으로 적용할 수 있을 것대신 SPA 라이브러리를 찾는 시간과 SPA 라이브러리를 공부하는 시간이 소요되긴 하겠지만 직접 개발하는 것 보다 비교가 안될 정도로 훨씬 빨리 SPA 기능을 적용할 수 있을 것


SPA 라이브러리(또는 프레임워크)로 유명한 것들은 엥귤러(NGULAR), 리엑트(React), 뷰(Vue)가 있음

여기서 우리는 리엑트를 배움

 

이 카테고리는 HTML, CSS, JS 공부를 끝내고 리엑트를 공부하려는 사람들을 위한 카테고리임

리엑트에 대해서 이미 알고 있거나 리엑트를 더 깊게 공부하려는 분과는 맞지 않음

 

리엑트(React)는 HTML, CSS, JS에 대한 사전 지식이 필요함

만약 HTML, CSS, JS를 잘 모른다면, 또는 리엑트 공부를 따라오면서 어려운 부분을 만나면 HTML, CSS, JS 공부를 하고 오자

 

보통의 블로그나 책의 설명을 보면 리엑트에 대해서 설명하고 장,단점이나 역사를 설명하는데 리엑트를 사용해보지 않았는데...

페이지가 많은 대규모 서비스를 개발 해본적이 없는데...

이런 부분들을 이해할 수 있을까?

괜히 지면 차지가 아닐까 싶음

 

리엑트의 장, 단점은 리엑트를 다 배우고 난 뒤에 이해할 수 있으니 다 배우고 난 후 장, 단점을 보자

728x90
LIST