React를 사용해 UI를 표현하기 위해 기본적으로 사용되는 컴포넌트에 대해 학습해보려고 합니다.
대문자로 시작해야 합니다.대표적으로 두 가지가 있습니다.
// Component1.jsx
export default function Component1() {
return <p>I am Component1</p>
}
// App.jsx
import Component from './Component1.jsx'
// Components.jsx
export function Component1() {
return <p>I am Component1</p>
}
export function Component2() {
return <p>I am Component2</p>
}
//App.jsx
import { Component1 } from './Components.jsx'
JSX는 확장된 문법이고 React는 JavaScript 라이브러리입니다.
하나의 부모 태그로 반환해야 합니다.<li> 태그는 닫는 태그가 필요 없지만, JSX에서는 명시적으로 닫아주어야 합니다.aria-* 와 data-* 는 대시를 사용해 작성합니다.
단순히 문자열 값을 전달하려는 경우 " "(따옴표)를 사용하면 되지만, 값을 동적으로 전달하려는 경우 { } (중괄호)를 사용해서 전달하면 됩니다.
export default function Introduce() {
const name = "potato"
return (
<h1>My name is {name}</h1>
);
}
div, h1과 같은
태그 이름에는 사용할 수 없습니다.
person={{ name: 'potato', age: 35 }} // style property는 캐멀 케이스로 작성합니다.
<div style={{ color: 'green', backgroundColor: 'black' }}`>
{person.name}
</div>
객체, 배열, 함수를 포함한 모든 JavaScript 값을 전달할 수 있습니다.
// 1. 자식 컴포넌트에 전달
export default function Intoduce() {
return (
<div>
<Profile
person={{ name: 'potato', age: '35' }}
size={100}
/>
<Profile
person={{ name: 'tomato', age: '30' }}
size={80}
/>
</div>
);
}
// 2. 자식 컴포넌트에서 받기
function Profile(props) {
let person = props.person;
let size = props.size
return (
<div>
{person.name}
{person.age}
</div>
);
}
// 보통 구조 분해 할당으로 받습니다.
// 기본값을 넣어줄 수도 있습니다.
function Profile({ person, size = 80 }) {
return (
<div>
{person.name}
{person.age}
</div>
);
}
// spread 문법도 사용 가능합니다.
function Introduce(props) {
return <Profile {...props} />
}
children으로 props를 받을 수 있습니다.
function Card({ children }) {
return (
<div className="card">
{children}
</div>
);
}
export default function Introduce() {
return (
<Card>
<Profile
size={100}
person={{
name: 'potato',
age: 35
}}
/>
</Card>
);
}
Props의 특징
1. props는 변경할 수 없습니다.
- 대신, 부모 컴포넌트에 새로운 객체를 전달하도록 요청하며 이전 props는 버려지게 되는 것입니다.
- 상호작용이 필요한 경우 state를 설정해야 합니다.
- props는 읽기 전용으로, 렌더링 할 때마다 새로운 props를 받습니다.