Develope Me!

[React] Props의 사용과 State와의 비교 본문

Front-end/React

[React] Props의 사용과 State와의 비교

코잘알지망생 2024. 3. 13. 17:53

props는 properties의 약자로 속성 값을 의미한다.

예제를 통해서 props를 알아보자.

 

App.js

import "./App.css";
import PropsStudy from "./component/PropsStudy";

function App() {
  return (
    <div className="App">
      <PropsStudy name={"FuBao"} age={3} weight={100} />
      <PropsStudy name={"RuiBao"} age={1} weight={20} />
      <PropsStudy name={"HuiBao"} age={1} weight={23} />
    </div>
  );
}

export default App;

 

PropsStudy라는 컴포넌트를 만든 후 App.js에 해당 컴포넌트를 3개 추가하고 컴포넌트에 값을 전달해보자.

 

PropsStudy.js

import { useState } from "react";

const PropsStudy = function (props) {
  const name = props.name;
  const age = props.age;
  const [weight, setWeight] = useState(props.weight);

  const msg = weight > 100 ? "뚠빵합니다." : "날씬합니다.";

  return (
    <div>
      <h1>Bao</h1>
      <h2 id="name">
        {name}({age})(몸무게:{weight}kg)
      </h2>
      <button
        onClick={() => {
          setWeight(weight - 1);
        }}
      >
        Minus
      </button>
      <button
        onClick={() => {
          setWeight(weight + 1);
        }}
      >
        Plus
      </button>
      <p>{msg}</p>
    </div>
  );
};

export default PropsStudy;

 

PropsStudy 컴포넌트에서 객체 형태의 props로 파라메타 값(name,age,weight)이 전달된다. App.js에서 전달받은 값은 컴포넌트 내부에서 변경할 수 없이 넘겨받은 값 그대로 사용해야 한다. 만약 값을 변경하고 싶다면 컴포넌트 내부에서 state를 다시 만들어야 한다. weight에 state를 만들어서 버튼을 클릭했을 때 몸무게-1이 되는 버튼과 몸무게+1이 되는 버튼을 추가해주었다. 변경된 몸무게를 확인한 뒤 몸무게에 따라 메시지를 다르게 출력되는 걸 확인해볼 수 있다. 

 

 

 

한 컴포넌트가 가지고 있는 state를 props로 넘길 수도 있다.  

 

UserName.js

export default function UserName({ name }) {
  return <p>Hello,{name}</p>;
}

 

PropsStudy.js

import { useState } from "react";
import UserName from "./UserName";

const PropsStudy = function (props) {
  const name = props.name;
  const age = props.age;
  const [weight, setWeight] = useState(props.weight);

  const msg = weight > 100 ? "뚠빵합니다." : "날씬합니다.";

  return (
    <div>
      <h1>Bao</h1>
      <UserName name={name} />
      <h2 id="name">
        {name}({age})(몸무게:{weight}kg)
      </h2>
      <button
        onClick={() => {
          setWeight(weight - 1);
        }}
      >
        Minus
      </button>
      <button
        onClick={() => {
          setWeight(weight + 1);
        }}
      >
        Plus
      </button>
      <p>{msg}</p>
    </div>
  );
};

export default PropsStudy;

 

UserName.js는 PropsStudy.js에서는 컴포넌트지만 해당 컴포넌트 내부에서는 props가 된다. 

 

 

 

※ props와 state의 차이점

둘은 데이터를 받고 처리하기 위해 사용된다는 공통점을 가지고 있지만 props외부(부모)컴포넌트에서 상속받는 데이터이면서 데이터를 변경할 수 없으며 state내부 컴포넌트에서 생성하고 작동하며 데이터를 변경할 수 있다는 점에서 차이점을 가지고 있다. 

 

'Front-end > React' 카테고리의 다른 글

[React] React Hook과 State(useState)  (0) 2024.03.13
[React] Component와 JSX, CSS 작성하기  (1) 2024.03.12
[React] React 프로젝트 생성하기  (0) 2024.03.12
Comments