본문 바로가기
프로젝트 기록/React, Node.js를 이용한 게시판 만들기

React 컴포넌트 재사용하기, props와 state - React, Node.js 프로젝트

by jeong11 2024. 10. 23.
반응형

React component의 구조와 재사용, props와 state

 

1. React component 

React는 컴포넌트 기반 아키텍처. 
컴포넌트는 UI의 독립적인 재사용이 가능한 조각으로 이를 조합해 복잡한 UI를 구성할 수 있다

 

1-1. Button 컴포넌트 만들기

> Button.js 생성

Button.js

import React from 'react';

function Button({ label, onClick, type }) {
  return (
    <button className={`btn btn-${type}`} onClick={onClick}>
      {label}
    </button>
  );
}

export default Button;

이 컴포넌트는 세 가지 props(label, onClick, type)을 받아서 버튼을 렌더링한다

(props에 대한 내용은 밑에서 다시 정리할 예정)

이렇게 생성한 버튼을 다른 컴포넌트에서 재사용할 수 있다

 

 

1-2. 컴포넌트 재사용

App.js

// App.js (React 프론트엔드)
import React from 'react';
import Button from './Button';

function App() {
  const handleClick = (message) => {
    alert(message);
  };

  return (
    <div className="container">
      <h1 className="text-center mt-4">Reusable Button Component</h1>
      <div className="text-center">
        <Button label="Primary Button" onClick={() => handleClick('Primary clicked')} type="primary" />
        <Button label="Secondary Button" onClick={() => handleClick('Secondary clicked')} type="secondary" />
        <Button label="Success Button" onClick={() => handleClick('Success clicked')} type="success" />
      </div>
    </div>
  );
}

export default App;

 

 

1-3. 실행

npm run start

실행화면

 

버튼 클릭 시 이벤트도 잘 발생한다

handleClick "Success"

 

1-4. 컴포넌트 재사용 설계 시 장점

1) 재사용성 : UI를 모듈화하고 유지보수가  쉬워진다

2) 유연성 : props를 통해 컴포넌트의 동작을 제어할 수 있으므로 다양한 방식으로 재사용할 수 있다

 

 

 

2. props와 state

2-1. props와 state의 개념

props : 부모 컴포넌트에서 자식 컴포넌트로 전달되는 데이터.
자식 컴포넌트는 데이터를 받아 UI를 렌더링할 수 있다
부모 컴포넌트는 자식 컴포넌트의 동작, 내용을 변경할 수 있도록 props를 전달한다
state : 컴포넌트 안에서 관리되는 동적인 데이터.
state는 컴포넌트 내부에서 변경될 수 있으며 state가 변경될 때마다 해당 컴포넌트가 렌더링된다

 

 

2-2. 실습 - Counter 컴포넌트 만들어 사용해보기

1) state를 사용해  count 값을 저장

>Counter.js 생성

Counter.js

import React, { useState } from 'react';

function Counter({ initialCount }) {
  const [count, setCount] = useState(initialCount);

  const increment = () => {
    setCount(count + 1);
  };

  const decrement = () => {
    setCount(count - 1);
  };

  return (
    <div className="counter">
      <h2>Count: {count}</h2>
      <button className="btn btn-primary" onClick={increment}>Increment</button>
      <button className="btn btn-danger" onClick={decrement}>Decrement</button>
    </div>
  );
}

export default Counter;

Counter 컴포넌트를 생성하였고 state를 사용해 count 값을 저장하였다

다음은 props를 사용해 부모 컴포넌트에서 초기 count 값을 자식 컴포넌트로 전달하면 된다

 

 

2) props 전달

전에 Button 내용은 주석 처리해주고 진행한다

 

여러 줄 주석 단축키는 

Alt + Shift + a

 

App.js

// App.js (React 프론트엔드)
import React from 'react';
import Counter from './Counter';

function App() {
  const handleClick = (message) => {
    alert(message);
  };

  return (
    <div className="container">
        <h1 className="text-center mt-4">Counter with Props and State</h1>
        <Counter initialCount={0} />    
    </div>
  );
}

export default App;

 

 

3) 실행

react는 바로 바로 컴파일이 되서 편하다

아까 button 실행한 페이지를 열어 확인해봐도 된다

혹시 꺼버렸다면 다시 실행

npm run start

 

Counter React App

 

Increment를 누르면 +, Decrement를 누르면 -

 

3. 다시 정리

props : 부모 컴포넌트 → 자식 컴포넌트(읽기 전용으로 받음)

state : 컴포넌트 내 관리, 해당 컴포넌트가 렌더링 될 때 변경

 

 

 

반응형