props
를 직접 수정해서는 안 됨 (Immutable).props
)를 통해 객체 형태로 받음 -> 구조 분해 할당(Destructuring)을 통해 더 간결하게 사용할 수 있음.props.children
: 컴포넌트 태그 사이에 작성된 내용(텍스트, 다른 컴포넌트 등)을 전달받는 특수한 prop.import
와 export
를 통해 받음// 자식컴포넌트인 MyComponent
import React from "react";
// 컴포넌트 함수의 매개변수 자리에서 바로 props 객체를 비구조화 할당
const MyComponent = ({ name = "심구리", children }) => {
return (
<div>
{/* 이제 name은 부모로부터 전달받거나, 전달받지 못하면 기본값 "심구리"가 됨 */}
안녕하세요 제 이름은 {name}입니다. <br />
children 값은 {children}입니다.
</div>
);
};
export default MyComponent;
// 부모컴포넌트인 App.js
import "./App.css";
import MyComponent from "./MyComponent";
//MyComponent를 HTML태그처럼 불러옴
const App= () => {
return <MyComponent> 자식 요소 </MyComponent>;
};
export default App;
위 코드와 같이 매개변수 자리에서 바로 props 객체를 비구조화 할당하는 것이 가장 현대적인 코드이고 부모 컴포넌트 태그사이의 내용을 보여주는 children props도 확인할 수 있다.
출력은 아래와 같다.
useState
Hook 등을 통해 상태를 변경할 수 있음.useState
:const [값, 값바꾸는함수] = useState(초기값);
형태//자식 컴포넌트인 Say.js
import React, { useState } from 'react';
const Say = () => {
const [message, setMessage] = useState('');
const onClickEnter = () => {setMessage('안녕하세요!')}
const onClickLeave = () => {setMessage('안녕히가세요!')}
const [color, setColor] = useState('black');
return (
<div>
<button onClick={onClickEnter}>입장</button>
<button onClick={onClickLeave}>퇴장</button>
<h1 style={{color}}>{message}</h1>
<button style={{color:'red'}} onClick={()=>setColor('red')}>빨간색</button>
<button style={{color:'green'}} onClick={()=>setColor('green')}>초록색</button>
<button style={{color:'blue'}} onClick={()=>setColor('blue')}>파란색</button>
</div>
);
};
export default Say;
// 부모컴포넌트
import "./App.css";
import Say from "./Say";
const App = () => {
return <Say />;
};
export default App;
위 코드를 보면 배열을 비구조화 할당하여 함수를 호출하면 message
, setMessage
와 같이 현재 상태
와 상태를 바꾸어주는 함수
를 반환한다.
퇴장을 누르면 message
, setMessage
가 반환되어 message
상태값이 '안녕히 가세요'로 바뀐다.
구분 | Props | State |
---|---|---|
데이터 소유 | 부모 컴포넌트 (외부) | 컴포넌트 자체 (내부) |
데이터 흐름 | 단방향 (부모 → 자식) | 컴포넌트 내에서 관리 |
수정 가능 여부 | 자식 컴포넌트에서 수정 불가 (Read-Only) | 컴포넌트 내에서 수정 가능 (Mutable) |
주요 목적 | 컴포넌트 설정 및 데이터 전달 | 컴포넌트의 동적인 상태 관리 및 UI 업데이트 |
함수형 사용 | 함수의 매개변수로 받음 | useState() Hook 사용 |
ㅋㅋ 커뮤니티식으로 정리해달라니까 이런다..
얘좀봐..
그런데 진짜 이해가 쏙쏙된다!