본문 바로가기

React

React, yarn, jsx (2024-05-13)

리액트(React)

더보기

- Facebook에서 개발한 JavaScript 사용자 인터페이스를 만들기 위한 라이브러리
- 재사용이 가능한 UI 컴포넌트를 작성할 수 있게 해주며, 데이터의 변경에 따라 UI를 효율적으로 업데이트할 수 있는 방법을 제공
- Virtual DOM을 사용하여 실제 DOM 조작을 최소화하고 성능을 향상
- 단일 페이지 응용 프로그램(SPA) 및 대규모 웹 애플리케이션에서 많이 사용
- JSX라는 문법을 통해 JavaScript 코드 내에서 HTML과 유사한 문법을 사용하여 컴퍼넌트를 정의할 수 있다

 

 

 

라이브러리(library) vs 프레임워크(Framework)


    라이브러리
    - 개발자가 필요할 때 함수 또는 모듈을 호출하여 사용하는 방식으로 동장
    - 애플리케이션의 전체 구조를 개발자가 직접 설계
    - 추가적인 기능을 제공하거나 특정 기능을 수행하기 위한 도구

    프레임워크
    - 제공된 틀 안에서 코드를 작성하고 프레임워크가 코드를 호출하여 실행
    - 개발자는 프레임워크가 정의한 규칙과 패턴을 따라야 함
    - 애플리케이션의 구조와 제어 흐름을 결정하며, 개발자는 프레임워크에 의해 제어되는 애플리케이션의 일부분을 작성

 

 

corepack enable
- node.js의 패키지 매니저인 npm의 새로운 기능
- npm의 내장 패키지 설치 속도를 향상시키는 기능
- npm 7 이후에 도입된 기능

yarn -v

npm i -g corepack

패키지 도구 
1. npm(Node Package Manager)
- Node.js 패키지를 관리하고 배포하는데 사용되는 표준 패키지 관리자
- 패키지를 설치하거나 업데이트하며, 프로젝트를 빌드 및 실행하는데 사용

2. npx(Node Package Excute)
- npm 패키지를 실행하고 사용하는 도구
- 로컬에 설치된 패키지를 직접 실행할 수 있음(프로젝트에 의존성을 전역으로 설치하지 않고도 패키지를 사용할 수 있음)
- 예) npx create-react-app (앱이름)

3. yarn
- JavaScript 패키지 매니저로, npm과 유사한 역할을 함
- Facebook, Google, Exponent ... 개발자들이 공동으로 개발한 오픈 소스 프로젝트이다
- npm 보다 빠른 속도와 안정적인 패키지 성치를 제공하며 다양한 기능을 포함하고 있다

 

< 각종 명령어 >


리액트 앱 만들기
    
    npx create-react-app basic
    
    yarn create react-app basic

 

node -v
npm -v
git --version

yarn -v
npm i -g corepack

 


리액트 공식 사이트
https://react.dev/

 

React

React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine components written by independent people, teams, and organizati

react.dev

 

create-react-app을 사용하여 앱을 생성 후 기본 디렉토리 및 파일 확인

public 디렉토리
브라우저에서 직접 액세스 할 수 있는 파일들이 포함되어 있음
    index.html: 웹 애플리케이션의 진입점

src 디렉토리
애플리케이션의 소스 코드를 포함하는 곳 
    index.js: React 앱의 진입점 파일. ReactDOM.render를 호출하여 React 컴퍼넌트를 DOM에 렌더링 시키는 역할이 들어있다
    App.js: 기본적인 앱 컴퍼넌트가 정의된 파일. 앱의 기본 구조와 레이아웃을 정의
    App.css: App 컴퍼넌트에 적용되는 CSS 스타일을 정의

 

크롬 부라우저 확장 프로그램 설치
    React Developer Tools 



JSX에서의 주석

    {/* 주석 내용 */}


컴퍼넌트에게 값 전달하기

    JSX
    <Hello userid = "apple"/>

    Component
    function Hello(props){
    <div>안녕하세요. {props.userid}님 </div>
    }

✔ JSX에서 null, false, undefined를 랜더링 하면 화면에 아무것도 출력하지 않음

 

 

 

App.js

더보기
import React from "react";
import Hello from "./Hello";
import "./App.css";
import Member from "./Member";
import Wrapper from "./Wrapper";

function App(){
  
  const userid = 'apple';
  const style = {
    // css 에서는 background-color
    // jx에서는 
    backgroundColor: 'deepskyblue',
    color: 'deeppink',
    fontSize: 30,
    padding: '1em'
  }
   

  return (
    <>
    {/* 주석 예시.  화면에 보이지 않습니다. */}
      <Hello/>
      <Hello/>
      <Hello userid = "apple"/>
      <Hello userid = "apple" name = "김사과" color = "deeppink"/>
      <div>DIV 사용</div>
      <div style = {style}>아이디 : {userid} </div>
      <div className ='black-box'></div>
      <Member userid='banana' name ="반하나" color="deepskyblue" />

      <Wrapper>
        <Hello userid = "apple" name = "김사과" color = "deeppink"/>
        <Hello userid = "banana" name = "반하나" color = "deepskyblue"/>
        <Member userid='orange' name ="오렌지" color="gold" isLover={true} />
        <Member userid='melon' name ="이메론" color="yellowgreen"isLover={false} />
      </Wrapper>
    </>
  );
}

export default App;

 

Hello.js , Member.js, Wrapper.js

더보기
import React from 'react';

function Hello(props){
    return <div style={{color: props.color}}>안녕하세요 {props.userid}({props.name})</div>
}

Hello.defaultProps = {
    userid : '아이디없음',
    name : '이름 없음',
    color : 'blue'
}

export default Hello;

 

import React from 'react';

function Member({userid, name, color, isLover}){
    return <div style={{color}}>안녕하세요 {userid}({name} {isLover && <b>❤</b>})</div>
    // isLover 값이 있다면 하트를 표시 없다면 &&뒤는 확인하지 않음
    {/* {isLover ? <b>❤</b> : null} */}
    // isLover 값이 있다면 하트를 표시 없다면 null 값 
}


export default Member;

 

import React from "react";

function Wrapper({ children }){
    const style = {
        border : " 3px solid deeppink",
        padding : '10px'
    }
    return (
        <div style = {style}>
            {children}
        </div>
    )
}

export default Wrapper;

 

문제 

더보기

JSX를 사용하여 아래와 같이 출력되도록 작성해보자.
(단, 프로젝트의 이름은 jsx)

    김사과님이 학습한 내용들
    * 파이썬
    * HTML
    * CSS
    * JavaScript
    * MySQL
    * MongoDB

    [이미지]

 

app.js

import './App.css';
import React from 'react';

function App() {
  const name = '김사과';
  const list = ['파이썬','HTML','CSS','JavaScript','MySQL','MongoDB'];

  return (
    <>
    <h2 className='deeppink'>{name}님이 학습한 내용들</h2>
    <ul>
      {
        list.map((item) => (
          <li>{item}</li>
        ))
      }
    </ul>
    <img style = {{width:'200px', height:'100px'}} src="https://images.chosun.com/resizer/jALq4imgNBe_THeLiwnShwJuzhg=/616x0/smart/cloudfront-ap-northeast-1.images.arcpublishing.com/chosun/ZKPVBQPHWVDYROSR7MHJ7NZIVA.jpg" alt="AI"></img>

    </>
    );
}

export default App;

 
App.css

.deeppink {
  color : deeppink;
}