· FRONT-END/└ React

[React] 기본 컴포넌트 배치

감자도리22 2024. 5. 1. 18:17

환경 : Visual Studio Code

 

리액트를 사용하여 기본 컴포넌트 배치를 해보자

위와 같은 구조로 위치를 설정해보자


 components 폴더 안에 Ex01.js / Ex02.js 파일을 만든다 

 

   - Ex01.js

//import

//function
function Ex01(){

    return (
        <>
            <h2>1번화면</h2>
        </>
    );
}

//export
export default Ex01;

 

   - Ex02.js

//import

//function
function Ex02(){

    return(
        <>
            <h2>2번화면</h2>
        </>
    );
}

//export
export default Ex02;

 

    - App.js

//JS파일의 최상단에는 import 키워드가 들어온다
// - 이미지, CSS, 다른 JS 파일 등을 불러올 수 있다
// - ES6 Module 시스템, RequireJS 등을 사용
import logo from './logo.svg';
import './App.css';
import Ex01 from './components/Ex01';
import Ex02 from './components/Ex02';

//모든 컴포넌트(JS) 파일에는 함수가 하나 존재한다
// - 함수가 하나의 화면 조각을 의미한다
// - 함수의 이름이 화면의 이름이다
function App() {

  //화면에 필요한 데이터들을 선언하고 계산하는 코드 배치

  //return 뒤에는 반드시 화면에 대한 코드가 있어야 한다(JSX)
  //JSX는 JSP처럼 HTML을 만들어내는 도구 역할을 수행(순수 HTML이 아님)
  //(중요) 반환되는 화면은 반드시 한 개의 태그로 감싸져야 한다
  // - class 대신 className을 사용해야 한다
  // - 속성에 ""를 쓰면 정적, {}를 쓰면 동적 데이터를 설정해야 한다
  // - 모든 태그는 종료 태그가 있어야 한다(input, img도 마찬가지)
  return (
    <>
      <h1>리액트 컴포넌트 만들기</h1>
      <Ex01></Ex01>
      <hr></hr>
      <Ex02></Ex02>
    </>
  );
}

//외부에서 이 파일을 이용할 수 있도록 내보내기 설정
//- 함수 이름(화면 이름)을 내보내기 하여 사용할 수 있도록 처리
export default App;

    (+) 위에서 만든 js파일을 태그 형식으로 삽입하면 된다

    (+) 각각의 js를 구분하기 위해 구분선<hr> 태그를 넣어줬다

 

 

   - 출력결과

 

 


 

카운트가 +/- 되는 기능을 구현해보자

(Ex02.js 만 바꾸면 된다)

 

 

   - Ex02.js

//import
//react 라이브러리 중에서 useState라는 기능을 쓰겠다
//Naming import(전체 다 안 쓰고 골라서 사용)
import {useState} from 'react';

//function
function Ex02(){

    //화면에서 변화하는 값을 state로 선언
    //- const는 불변 값을 생성할 때 사용
    //- React는 데이터 변화에 따라 화면을 자동 갱신
    //- 자동갱신 구조 구현을 위해 반드시 const 필요
    //- 만들 때 변수명, setter 메소드명을 순차적으로 작성
    //- 사용할 때는 변수를 쓰고, 변경할 때는 setter 메소드 사용

    const [count, setCount] = useState(16);

    // state를 화면에 출력할 수 있다
    // - { 이름 } 형식으로 화면에 출력(표현식), EL과 유사
    // - state가 변하면 해당 자리의 값이 자동으로 변함
    // 이벤트를 설정할 수 있다
    // - onClick과 같이 반드시 이벤트 첫글자가 대문자여야 함
    // - onClick 안에는 함수를 배치하여야 한다
    // - 람다 형식으로 사용(화살표 함수, Arrow function)
    return(
        <>
            <h2>2번화면</h2>

            <button onClick={e=>setCount(count-1)}>-</button>
            &nbsp;&nbsp;
            <span>{count}</span>
            &nbsp;&nbsp;
            <button onClick={e=>setCount(count+1)}>+</button>
        </>
    );
}

//export
export default Ex02;

    (+) 주석 참고!

    (+) React는 데이터 변화에 따라 화면을 자동 갱신해주기 때문에, jquery에 비해 훨씬 간단한 코드로 원하는 결과를 만들어 낼 수 있다. react를 사용하기 위해서 화면에서 변하고자 하는 한 지점을 지정하여 그 부분만 바뀐다고 생각하고 코딩하는 것이 좋다.

    (+) const : 불변 값 생성 시 사용, 자동 갱신 구조 구현을 위해 필요!!
                     - 만들 때 변수명, setter 메소드명을 순차적으로 작성
                     - 사용할 때는 변수를 쓰고, 변경할 때는 setter 메소드 사용
    (+)  state를 화면에 출력할 수 있음
                     -  { 이름 } 형식으로 화면에 출력(표현식), EL과 유사
                     -  state가 변하면 해당 자리의 값이 자동으로 변함
    (+) 이벤트를 설정할 수 있다
                     -   onClick과 같이 반드시 이벤트 첫글자가 대문자여야 함
                     -   onClick 안에는 함수를 배치하여야 한다
                     -   람다 형식으로 사용(화살표 함수, Arrow function)

 

 

   - 출력결과

- / + 기능 수행


이번엔 이미지 크기를 변경하도록 해보자

(새로 Ex03.js 파일을 만들어서 실행)

 

 

   - Ex03.js

//import

import { useState } from "react";

//function
function Ex03(){

    const [size, setSize] = useState(300);

    return (
        <>
            <h2>3번화면</h2>

            <button onClick={e=>setSize(150)}>작게</button>
            &nbsp;&nbsp;
            <button onClick={e=>setSize(300)}>보통</button>
            &nbsp;&nbsp;
            <button onClick={e=>setSize(450)}>크게</button>
            <br></br>
            <img class="dummy" 
                        src="https://picsum.photos/id/1001/500/500" 
                        width={size} height={size}></img>
        </>
    );
}

//export
export default Ex03;

    (+) Ex02.js와 유사한 방식이다

    (+) state를 width/height에 넣어주어 바뀌도록 하였다

 

   - 출력결과

 

작게/보통/크게 버튼 누르기

 

 

 

 

개인 공부 기록용입니다:)

728x90