1. React 컴포넌트란?
React 컴포넌트는 UI(사용자 인터페이스)를 나누는 독립적이고 재사용 가능한 단위
컴포넌트는 JavaScript 함수 또는 클래스 형태로 정의된다
props를 입력으로 받아 JSX를 반환한다
※ 알아볼 점
① 함수형 컴포넌트와 클래스형 컴포넌트 중 어떤 것을 선택해 사용해야 할까요?
② Props와 State의 차이는 무엇인지 정리
2. React 컴포넌트의 구성
2-1. 함수형 컴포넌트
JavaScript 함수로 작성되며 props를 받아 JSX를 반환한다
주로 간단한 UI를 표현하거나 React Hooks와 함께 상태를 관리할 때 사용한다
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
2-2. 클래스형 컴포넌트
ES6 클래스 문법을 사용해 작성되며, state와 라이프 사이클 메소드를 사용할 수 있다
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
☞ React 16.8 이후로는 주로 함수형 컴포넌트와 Hooks이 선호된다
3. React 컴포넌트의 역할
1) UI 렌더링
컴포넌트는 특정 상태에 따라 화면에 표시될 UI를 정의한다
2) 재사용성
동일한 컴포넌트를 여러 번 사용할 수 있어 코드를 효율적으로 관리할 수 있다
3) 상태 관리
컴포넌트는 상태(State)와 속성(Props)을 통해 동적인 UI를 생성한다
4. React 컴포넌트 만들기
4-1. 함수형 컴포넌트 어플리케이션 생성
JavaScript 함수로 정의한다
1) npx로 생성
npx create-react-app component_demo
2) components 폴더 생성 - Greeting.js 생성
> /src/components/Greeting.js
// 함수형, 클래스형 버전 포함
// src/components/Greeting.js
//함수형 컴포넌트
function Greeting() {
return <h1>Hello, React!!!</h1>;
}
export default Greeting;
3) App.js 수정
import './App.css';
import React from 'react';
import Greeting from './components/Greeting';
function App() {
return(
<div>
<Greeting />
</div>
);
}
export default App;
4) 어플리케이션 실행
npm start
→ 실행화면
4-2. 클래스형 컴포넌트 생성하기
React의 Component를 상속해 정의한다
1) component_demo 프로젝트를 그대로 쓴다
2) Greeting.js 수정
// 함수형, 클래스형 버전 포함
// src/components/Greeting.js
// 함수형 컴포넌트
/*
function Greeting() {
return <h1>Hello, React!!!</h1>
}
export default Greeting;
*/
// 클래스형 컴포넌트
import React, { Component } from 'react';
class Greeting extends Component {
render() {
return <h1>Hello, React!</h1>
}
}
export default Greeting;
3) 어플리케이션 실행
npm start
5. React의 Props와 State
5-1. Props(속성)
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달한다
읽기 전용 데이터로 자식 컴포넌트에서 수정할 수 없다
1) Greeting.js 코드에 props를 사용해준다
// src/components/Greeting.js
import Reac, { Component } from 'react';
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
export default Greeting;
2) App.js
// src/App.js
import './App.css';
import React from 'react';
import Greeting from './components/Greeting';
function App() {
return <Greeing name="Minjeong" />;
}
export default App;
3) 실행 결과
5-2. State(상태)
컴포넌트 내부에서 관리되는 동적인 데이터를 state라고 한다
카운터 만들기
1) components 폴더에 Counter.js 생성
// src/components/Counter.js
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count +1)}>증가</button>
</div>
);
}
export default Counter;
2) App.js 수정
import './App.css';
import React from 'react';
import Counter from './components/Counter';
// State 예제
function App() {
return <Counter />;
}
export default App;
3) 실행화면
→ 증가를 누르면 숫자가 올라가는 Counter
6. Props와 State 정리하는 예제
☞ 이름을 입력받아 화면에 표시하는 컴포넌트 만들기
1) components 폴더에 InputGreeting.js 생성
// src/components/InputGreeting.js
import React, { useState } from 'react';
function InputGreeting() {
const [name, setName] = useState('');
return (
<div>
<input
type="text"
placeholder="이름을 입력하세요"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<h1>Hello, {name}!</h1>
</div>
);
}
export default InputGreeting;
2) App.js 수정
import './App.css';
import React from 'react';
import InputGreeting from './components/InputGreeting';
function App() {
return <InputGreeting />;
}
export default App;
3) 실행화면
4) 테스트
※ 알아볼 점 정리
① 함수형 컴포넌트와 클래스형 컴포넌트 중 어떤 것을 선택해 사용해야 할까?
→ React 최신버전에서는 함수형 컴포넌트 사용을 권장함
② Props와 State의 차이는 무엇인지 정리
→ Props는 부모에서 자식으로 데이터를 전달하고,
State는 컴포넌트 내부에서 관리된다
오늘의 깃 잔디심기 완료!
https://github.com/minjeong-j/component_demo
GitHub - minjeong-j/component_demo: react 컴포넌트와 props, state
react 컴포넌트와 props, state. Contribute to minjeong-j/component_demo development by creating an account on GitHub.
github.com
'개발 기록 > front - react' 카테고리의 다른 글
[React] 함수형 컴포넌트 (0) | 2024.11.27 |
---|---|
[React] React 컴포넌트 생명주기, 생명주기 메소드 (0) | 2024.11.26 |
[JavaScript] 화살표 함수 = (arrow function) => {} (2) | 2024.11.20 |
React의 UseEffect는 왜 두 번씩 실행되어 빡치게 만드는가 (1) | 2024.11.16 |
[REACT] Failed to compile. Module not found : Can't resolve 'react-router-dom' (1) | 2024.11.04 |