본문 바로가기

Frontend/React

[React] props를 통해 컴포넌트에 값 전달하기

728x90
반응형

props는 properties의 줄임말이다. 어떠한 값을 컴포넌트에게 전달해줘야 할 때, props를 사용한다.

 

예를 들어, App 컴포넌트에서 Hello 컴포넌트를 사용할 때 age라는 값을 전달해주려면 다음과 같이 코드를 작성하면 된다.

// App.js

import "./App.css";
import Hello from "./component/Hello.js";

function App() {
  return (
    <div className="App">
      <Hello age={10} />
      <Hello age={20} />
      <Hello age={30} />
    </div>
  );
}

export default App;
// Hello.js

import { useState } from "react";

export default function Hello(props) {
  const [name, setName] = useState("Mike");
  
  return (
    <div>
      <h2>
        {name}({props.age}세)
      </h2>
      <button
        onClick={() => {
          setName(name === "Mike" ? "Jane" : "Mike");
        }}
      >
        Change
      </button>
    </div>
  );
}

 


 

props로 넘겨받은 값은 컴포넌트 안에서 변경할 수 없다. 넘겨받은 값을 변경하려고 하면 에러가 발생한다.

 

만약 값을 변경하고 싶으면 컴포넌트 내부에서 state를 다시 만들어야 한다.

// Hello.js

import { useState } from "react";

export default function Hello(props) {
  props.age = 100;
  const [name, setName] = useState("Mike");
  const [age, setAge] = useState(props.age);

  return (
    <div>
      <h2>
        {name}({age}세)
      </h2>
      <button
        onClick={() => {
          setName(name === "Mike" ? "Jane" : "Mike");
          setAge(age + 1);
        }}
      >
        Change
      </button>
    </div>
  );
}

 

구조분해할당 문법으로 다음과 같이 props를 전달받을 수도 있다.

import { useState } from "react";

export default function Hello({ age }) {
  const [name, setName] = useState("Mike");
  const msg = age > 19 ? "성인입니다" : "미성년입니다";

  return (
    <div>
      <h2>
        {name}({age}세) : {msg}
      </h2>
      <button
        onClick={() => {
          setName(name === "Mike" ? "Jane" : "Mike");
        }}
      >
        Change
      </button>
    </div>
  );
}


 

다음은 컴포넌트가 가지고 있는 state를 props로 넘기는 예제다.

// UserName.js

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

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

export default function Hello({ age }) {
  const [name, setName] = useState("Mike");
  const msg = age > 19 ? "성인입니다" : "미성년입니다";

  return (
    <div>
      <h2>
        {name}({age}세) : {msg}
      </h2>
      <UserName name={name} />
      <button
        onClick={() => {
          setName(name === "Mike" ? "Jane" : "Mike");
        }}
      >
        Change
      </button>
    </div>
  );
}

 

Hello 컴포넌트의 name이 바뀌면 UserName 컴포넌트의 name도 바뀌는 것을 확인할 수 있다.

 

728x90
반응형

'Frontend > React' 카테고리의 다른 글

[React] json-server  (0) 2024.06.21
[React] 라우터 구현(react-router-dom)  (0) 2024.06.21
[React] 이벤트 처리(Handling Events)  (0) 2021.12.25
[React] CSS 작성법(module css)  (0) 2021.12.23
[React] 컴포넌트 만들기  (0) 2021.12.22