본문 바로가기

클라이언트/React
[리액트(React)] Component, Props

// 컴포넌트, Component

- 사용자 인터페이스를 구성하는 독립적이고 재사용 가능한 부분

- 여러 컴포넌트들을 조립하여 UI를 구성한다.

- 컴포넌트명은 항상 대문자로 시작해야 한다.

- 컴포넌트 함수에서는 항상 렌더링 가능한 값이 반환되어야 한다.

- 컴포넌트 간의 연관성이 매우 높거나 반드시 함께 있어야만 작동하는 경우가 아니라면 별도의 컴포넌트는 별도의 파일에 저장하는 것이 좋다.


● 함수형 컴포넌트(Functional Components)

function Greeting(props) {
  return (
    <div>
      <h1>{props.name}입니다.</h1>
    </div>
  );
}


● 클래스형 컴포넌트(Class Components)

class Greeting extends React.Component {
  render() {
    return <h1>{this.props.name}입니다.</h1>;
  }
}

// Props

- 컴포넌트에 전달되는 data

- 상위 컴포넌트에서 하위 컴포넌트로 전달한다.

- Element가 생성된 후 값을 변경할 수 없다.
   > 값을 변경하려면 새로운 값을 컴포넌트에 전달한 후 Element를 새로 생성해야 한다.

- 컴포넌트와 함께 이름={값} 형태로 넘겨주고, 받을 때는 props.이름으로 받아서 사용한다.

function 보내는 컴포넌트() {
    return (
        <받는 컴포넌트 props명칭={넘길data}/>
    )
}

function 받는 컴포넌트(props) {
    return (
        <h1>{props.pops명칭}</h1>
    )
}


- props를 전달할 때 {....배열[인덱스]}를 이용하여 간단하게 선언할 수 있다. > 전개 구문(spread 구문 활용)

//기본
<CoreConcept title={CORE_CONCEPTS[1].title}
    description={CORE_CONCEPTS[1].description}
    image={CORE_CONCEPTS[1].image}
/>

//spread syntax 활용
<CoreConcept {...CORE_CONCEPTS[1]} />


- props를 받을 때 ({props1, props2, props3})으로 받아서 간단하게 사용할 수 있다. > 구조 분해 할당 활용

//기본
function CoreConcept(props) {
  return (
    <li>
      <img src={props.image} alt="img" />
      <h3>{props.title}</h3>
      <p>{props.description}</p>
    </li>
  );
}
//Destructuring Assignment 활용
function CoreConcept({ image, title, description }) {
  return (
    <li>
      <img src={image} alt="img" />
      <h3>{title}</h3>
      <p>{description}</p>
    </li>
  );
}


- props.chilrdren으로 innerText를 받을 수 있다.

export default function TabButton(props) {
  return (
    <li>
      <button>{props.children}</button>
    </li>
  );
}

function App() {
  return (
      <TabButton>Hi</TabButton>
  );
}

export default App;

import React from 'react';

function Comment(props) {
  return (
    <div style={styles.wrapper}>
      <div style={styles.imageContainer}>
        <img
          src='https://upload.wikimedia.org/wikipedia/commons/8/89/Portrait_Placeholder.png'
          style={styles.image}
        />
      </div>

      <div style={styles.contentContainer}>
        <span style={styles.nameText}>{props.name}</span>
        <span style={styles.commentText}>{props.comment}</span>
      </div>
    </div>
  );
}

export default Comment;

 

import React from 'react';
import Comment from './Comment';

const comments = [
  {
    name: 'Hana',
    comment: '나무의 하루',
  },
  {
    name: 'sorrel012',
    comment: '안녕하세요',
  },
];

function CommentList(props) {
  return (
    <div>
      {comments.map((comment) => (
        <Comment name={comment.name} comment={comment.comment} />
      ))}
    </div>
  );
}

export default CommentList;

'클라이언트 > React' 카테고리의 다른 글

[리액트(React)] Hook  (2) 2024.01.03
[리액트(React)] State, Lifecycle  (0) 2024.01.02
[리액트(React)] Elements Rendering  (0) 2023.12.28
[리액트(React)] JSX  (0) 2023.12.27
React.js란? (개념, 설치 및 설정)  (0) 2023.12.22