컴포넌트
컴포넌트란?
- 스스로 상태를 관리하는 캡슐화된 코드 조각
- (기술적으로) 하나의 JSX를 반환하는 함수
//App.js
export default function App() { //export default 다른 컴포넌트에서 사용하기 위함.
return (
<div>
<h1>Hello,</h1>
<h2>World</h2>
</div>
);
}
-------------------------
//index.js
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
<App />, //App 컴포넌트
document.getElementById('root');
);
---------------------------
컴포넌트 만들기
- JSX 형태로만 컴포넌트를 만드는 것 -> 함수형태로 컴포넌트를 만드는 것
: 함수라는 scope 개념이 생기면서 고유한 로직이 들어갈 수 있고, 컴포넌트 스스로 상태를 가질 수 있음.
- import, export 문법 사용 (es6에서 모듈을 불러오고 내보내는 방법)
- 컴포넌트 이름은 PascalCase로 지어야 함 (단어의 시작 문자를 대문자)
- 컴포넌트는 의미단위로 쪼개서 파일을 분리
Props
Props란?
- 부모 컴포넌트에서 자식 컴포넌트로 내려주는 데이터
// 부모에서 자식으로 데이터를 내려줌.
function App() { //부모
return (
<div>
<MyComponent value={'test'}/>
</div>
);
}
function MyComponent(props) { //자식
return <div>{props.value}</div>;
}
--------------------------------------
// 컴포넌트 태그로 감싼 값이 props.children으로 전달됨.
function App() {
return (
<div>
<MyComponent>
<h1>value</h1>
</MyComponent>
</div>
);
}
function MyComponent(props) {
return <div>{props.children}</div>; //<h1>value</h1>
}
Props 활용 팁
- 구조분해할당 구문을 잘 활용하자
- 특정 Props에 기본 값을 줄 수 있음
- Props는 읽기 전용
//Heading.js
export default function Heading(props) {
if (props.type === "h2") {
return <h2>{props.children}</h2>;
}
return <h1>{props.children}</h1>;
}
//index.js
import Heading from "./components/Heading";
export default function App() {
return (
<div>
<Heading type="h1">test</Heading>
<Heading type="h2">World</Heading>
</div>
);
}
State
State란
- 컴포넌트(상태를 관리) 내부에서 사용되는 변수
- State 값이 변하면 컴포넌트가 리렌더링 됨
- 렌더링 사이클에서 값이 보존됨
import { useState } from "react";
export default function App() {
let [value, setValue] = useState(0);
return (
<div>
<h1>value: {value}</h1>
<button
onClick={() => {
console.log("Increase value1", value);
setValue(value + 1);
console.log("Increase value2", value);
//위 아래 콘솔 로그 모두 같은 값으로 찍힘(증가 전 값으로 나타남): 이유는 모든 랜더링이 끝난 후 한꺼번에 모아서 setState으로 변경을 해주기 때문.!!
}}
>
Increase value
</button>
);
}
클래스형 컴포넌트 vs. 함수형 컴포넌트 (위)
클래스형 컴포넌트
- 클래스 문법으로 구현한 컴포넌트
- useStatae와 같은 Hooks는 React 버전 16.8부터 사용 가능 (그 전에는 클래스형 컴포넌트만 state를 가질 수 있었음)
- 클래스의 멤버 변수로 state 정의
- render라는 멤버 함수에서 반환한 값이 화면에 그려짐
import React, { Component } from 'react';
export default class App extends Component {
state = {
value: 0
};
constructor(props) {
super(props);
this.state = {
value: 1
};
}
resetValue() {
this.setState({ value: 0 });
}
render() {
return (
<div>
<h1>value: {this.state.value}</h1>
<button
onClick={() => {
this.setState((state) => ({ //Component의 함수 setState : 컴포넌트에 값이 바뀌었다고 알림. -> render 함수 다시 실행
value: state.value + 1
}));
}}
>
Increase value
</button>
<button
onClick={this.resetValue.bind(this)} //bind 안쓰면 this를 button 요소를 가리켜 오류.
>
Reset value
</button>
</div>
);
}
}'Javascript > React' 카테고리의 다른 글
| React 이벤트 핸들링 (2) | 2025.01.09 |
|---|---|
| React의 Life Cycle 이해 - Hooks (5) | 2025.01.08 |
| React JSX (javascript xml) (1) | 2025.01.06 |
| React란? (0) | 2025.01.06 |