🔥 컴포넌트에 대해 기초적인 지식이 없다면 해당 포스팅을 참고하자. 🔥

Why to use ‘props’

컴포넌트는 결국 함수로서 컴포넌트 바디 scope 를 벗어나는 변수나 state 를 사용하지 못한다.

부모 컴포넌트에서 정의한 state 를 자식 컴포넌트에서 사용하기 위해서는 props 문법을 이용해야 한다.

What is ‘props’

부모 컴포넌트에서 자식 컴포넌트로 전달하는 변수 혹은 인자props 라고 한다.

How to use ‘props’

부모 컴포넌트에서 자식 컴포넌트를 사용할 때 html(jsx) 태그 안에 전달하고 싶은 변수를 입력한다.

형식은 다음과 같다. <태그 임의의props명={전달할 변수명}> , 예를 들면 <div name={name}> 등과 같이 말이다.

이 때, 자식 컴포넌트로서 사용되는 함수를 정의할 때 props 파라미터를 argument 로서 입력해야한다.

예제 코드는 다음과 같다.

function App() {
  let [title, setTitle] = useState(['나이키', '아디다스', '퓨마']);
  return
  (
    <Modal title={title}></Modal> // <Modal 임의의props명={전달할 변수명}>
  )  
}

function Modal(props) {
  return (
    <div>
      <h2> 제목 { props.title[1] } </h2>
    </div>
  )
}

Ex. 글 제목을 누르면 모달창이 뜨게 해보자

특정 글 제목을 누르면 그 글에 해당하는 상세 내용이 뜨는 모달창을 만들어 보자.

결과 화면은 다음과 같다.

코드는 다음과 같다. .map() 함수에 익숙하지 않은 사람들은 다음 을 참고하자.

import React, {useState} from 'react'
import './App.css'

function App() {
  let [title, setTitle] = useState(['나이키', '아디다스', '퓨마']);
  let [date, setDate] = useState(['2월 2일', '3월 5일', '4월 6일'])
  let [modalNum, setModalNum] = useState();
  let [modal, setModal] = useState(false)
  return (
    <div className="App">
      <div className="black-nav">
        <div>개발 BLOG</div>
      </div>
      { title.map((e, i) => {
        return (
          <div className="list">
            <h3 onClick={() => {
              setModalNum(i);
              modal === false ? setModal(true) : setModal(true);
            }}>
              {' '}{ e }{' '}
            </h3>
            <p>{ date[i] }</p>
            <hr />
          </div>
        );  
      })}
      {
        modal === true 
        ? <Modal title={title} date={date} modalNum={modalNum}></Modal> 
        : null
      }
    </div>
  )
}

function Modal(props) {
  return (
    <div className="modal">
      <h2>{props.title[props.modalNum]}</h2>
      <p>{props.date[props.modalNum]}</p>
    </div>
  )
}

export default App

❗ 기억해야 할 것은 몇 번째 제목을 눌렀는지에 관한 상태 정보를 state 를 이용해서 저장한다는 점이다 ❗

Leave a comment