Component
React μ μ¬μ¬μ© κ°λ₯ν UI μμ
μ»΄ν¬λνΈλ μ¬μ¬μ© κ°λ₯ν UI μ‘°κ°μΌλ‘, λ
립μ μ΄λ©° νΉμ κΈ°λ₯μ μννλ λ° μ¬μ©λ©λλ€. React μ ν리μΌμ΄μ
μ μ»΄ν¬λνΈμ μ‘°ν©μΌλ‘ ꡬμ±λλ©°, κ° μ»΄ν¬λνΈλ μ체μ μΌλ‘ μνλ₯Ό κ°μ§ μ μμ΅λλ€. μ΄λ¬ν λͺ¨λνλ ꡬ쑰λ μ ν리μΌμ΄μ
μ λ³΄λ€ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
μ»΄ν¬λνΈ μ΄ν΄νκΈ°
μμ κ·Έλ¦Όμμ λ€μ 리μ‘νΈ μμ΄μ½μΌλ‘ νμν λΆλΆμ μ λΆ μ»΄ν¬λνΈμ
λλ€.
μ»΄ν¬λνΈλ React μ ν리μΌμ΄μ
μμ λ€μν μν μ μνν μ μμ΅λλ€. μ£Όλ‘ λ€μκ³Ό κ°μ μν λ‘ μ¬μ©λ©λλ€
ν€λ, λ©μΈ, νΈν°, λ©λ΄λ°, μ¬μ΄λλ°, νΌ, λ²νΌ λ±
1.
ν€λ (Header) μ»΄ν¬λνΈ: μΉ νμ΄μ§ μλ¨μ μμΉνλ©° μ¬μ΄νΈ λ‘κ³ , λ€λΉκ²μ΄μ
λ±μ ν¬ν¨ν μ μμ΅λλ€.
2.
λ©μΈ (Main) μ»΄ν¬λνΈ: μΉ νμ΄μ§μ μ£Όμ μ½ν
μΈ λ₯Ό νμνλ λΆλΆμΌλ‘, λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό ν¬ν¨νμ¬ νμ΄μ§λ₯Ό ꡬμ±ν μ μμ΅λλ€.
3.
νΈν° (Footer) μ»΄ν¬λνΈ: μΉ νμ΄μ§ νλ¨μ μμΉνλ©° μ μκΆ μ 보, μ°λ½μ² λ±μ νμν μ μμ΅λλ€.
4.
λ©λ΄λ° (Navbar) μ»΄ν¬λνΈ: λ€λΉκ²μ΄μ
λ©λ΄, λ§ν¬ λ±μ λ΄λΉνμ¬ μ¬μ©μκ° νμ΄μ§ κ°μ μ΄λν μ μκ² ν©λλ€.
5.
μ¬μ΄λλ° (Sidebar) μ»΄ν¬λνΈ: μΉ νμ΄μ§μ μΈ‘λ©΄μ μμΉνλ©° λΆκ° μ 보λ λ©λ΄ λ±μ νμν μ μμ΅λλ€.
6.
νΌ (Form) μ»΄ν¬λνΈ: μ¬μ©μλ‘λΆν° μ 보λ₯Ό μ
λ ₯λ°κΈ° μν νΌ μμλ€μ ν¬ν¨ν μ μμ΅λλ€.
7.
λ²νΌ (Button) μ»΄ν¬λνΈ: μ¬μ©μμ μνΈμμ©νκΈ° μν λ²νΌμ νμν μ μμ΅λλ€.
λν, Reactμμλ μ»΄ν¬λνΈ μμ λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό ν¬ν¨ν μ μμ΅λλ€. μ΄λ₯Ό Component Composition; "μ»΄ν¬λνΈ ν©μ±" λλ "μ»΄ν¬λνΈ μ‘°λ¦½"μ΄λΌκ³ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄ν¬λνΈλ₯Ό μ¬μ¬μ©νκ³ , μ½λλ₯Ό λͺ¨λννμ¬ μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€. μλ₯Ό λ€λ©΄, λ©μΈ μ»΄ν¬λνΈ μμ λ€μν μΈλΆ μ»΄ν¬λνΈλ₯Ό μ‘°ν©νμ¬ νμ΄μ§λ₯Ό ꡬμ±νλ κ²μ΄ κ°λ₯ν©λλ€.
μ»΄ν¬λνΈ μ μ
Reactμμ μ»΄ν¬λνΈλ₯Ό μ μνλ λ°©λ²μ ν¬κ² ν¨μν μ»΄ν¬λνΈμ ν΄λμ€ μ»΄ν¬λνΈ λ κ°μ§κ° μμ΅λλ€.
1.
ν¨μν μ»΄ν¬λνΈ
2.
ν΄λμ€ μ»΄ν¬λνΈ
ν¨μν μ»΄ν¬λνΈ
function ν€μλλ νμ΄ν ν¨μλ₯Ό μ¬μ©νμ¬ μ μνλ©°, propsλ₯Ό μΈμλ‘ λ°μ μ»΄ν¬λνΈλ₯Ό λ°νν©λλ€.
JSX λ¬Έλ²μ μ¬μ©νλ κ²½μ° νμ₯μλ₯Ό .jsxλ‘ μ¬μ©νλ κ²μ΄ μΌλ°μ μ
λλ€. κ·Έλ¬λ JSX λ¬Έλ²μ μ¬μ©νμ§ μκ³ μΌλ° JavaScript νμΌλ‘ ꡬννλ €λ©΄ .js νμ₯μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μΌλ°μ μΌλ‘ Reactμμλ μ»΄ν¬λνΈ νμΌμ JSXλ₯Ό μ¬μ©νλ―λ‘ .jsx νμ₯μλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μ΄λ κ² ν¨μΌλ‘μ¨ μ½λ μλν°λ λ€λ₯Έ λꡬμμ ν΄λΉ νμΌμ΄ React μ»΄ν¬λνΈλ₯Ό ν¬ν¨νκ³ μμμ μ½κ² νμ
ν μ μμ΅λλ€.
μ μΈμ ν¨μλ‘ ν¨μν μ»΄ν¬λνΈ μ μΈ
import React from 'react';
// μ μΈμ ν¨μ - ν¨μν μ»΄ν¬λνΈ μ μΈ
function FunctionalComponent() {
return (
<div>
<h1>Hello, Functional Component!</h1>
<p>This is a simple functional component.</p>
</div>
);
}
export default FunctionalComponent;
JavaScript
볡μ¬
μ΅λͺ ν¨μ(νμ΄ν ν¨μ)λ‘ ν¨μν μ»΄ν¬λνΈ μ μΈ
import React from 'react';
// μ΅λͺ
ν¨μ(νμ΄ν ν¨μ) - ν¨μν μ»΄ν¬λνΈ μ μ
const FunctionalComponent = (props) => {
return (
<div>
<h1>Hello, Functional Component!</h1>
<p>This is a simple functional component.</p>
</div>
);
};
export default FunctionalComponent;
JavaScript
볡μ¬
Hooksλ₯Ό μ¬μ©ν ν¨μν μ»΄ν¬λνΈ
import React, { useState, useEffect } from 'react';
const ExampleComponent = () => {
// useState: ν¨μν μ»΄ν¬λνΈμμ μνλ₯Ό κ΄λ¦¬ν μ μκ² ν΄μ£Όλ Hook
const [count, setCount] = useState(0);
// useEffect: ν¨μν μ»΄ν¬λνΈμμ λΆμ ν¨κ³Ό(μ¬μ΄λ μ΄ννΈ)λ₯Ό μνν μ μκ² ν΄μ£Όλ Hook
useEffect(() => {
document.title = `Count: ${count}`;
// μ»΄ν¬λνΈκ° λ§μ΄νΈλκ±°λ count κ°μ΄ λ³κ²½λ λλ§λ€ μ€νλλ λΆμ ν¨κ³Ό
// μ¬κΈ°μλ λ¬Έμμ μ λͺ©μ μ
λ°μ΄νΈνλ μμλ₯Ό 보μ¬μ€λλ€.
// μ΄λ κ² useEffectλ₯Ό μ¬μ©νλ©΄ λ λλ§ μ§ν λλ κ°μ΄ λ³κ²½λ λ νΉμ μμ
μ μνν μ μμ΅λλ€.
// useEffectμ λ λ²μ§Έ λ§€κ°λ³μλ‘ λ°°μ΄μ μ λ¬νλ©΄ ν΄λΉ κ°μ΄ λ³κ²½λ λλ§ μ€νλ©λλ€.
// λ§μ½ λΉ λ°°μ΄μ μ λ¬νλ©΄ μ»΄ν¬λνΈκ° μ²μ λ§μ΄νΈλ λλ§ μ€νλ©λλ€.
}, [count]);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
};
export default ExampleComponent;
JavaScript
볡μ¬
β’
useState, useEffect, λ±μ Hook ν¨μλ₯Ό μ¬μ©νμ¬ μνμ λΌμ΄νμ¬μ΄ν΄ κΈ°λ₯μ ν¨μν μ»΄ν¬λνΈμμ μ¬μ©ν μ μκ² λ©λλ€.
β’
useState
: ν¨μν μ»΄ν¬λνΈμμ μνλ₯Ό μΆκ°νκ³ κ΄λ¦¬ν μ μκ² νλ Hookμ
λλ€. useState ν¨μλ νμ¬ μνμ μνλ₯Ό κ°±μ ν μ μλ ν¨μλ₯Ό λ°νν©λλ€.
β’
useEffect
: ν¨μν μ»΄ν¬λνΈμμ λΆμ ν¨κ³Ό(μ¬μ΄λ μ΄ννΈ)λ₯Ό μνν μ μκ² νλ Hookμ
λλ€. μ»΄ν¬λνΈμ λ λλ§ μ§νλ νΉμ μνλ νλ‘μ€κ° λ³κ²½λ λ νΉμ μμ
μ μνν μ μμ΅λλ€.
ν¨μν μ»΄ν¬λνΈλ κ°κ²°νκ³ κ°λ
μ±μ΄ μ’μΌλ©°, Hooksμ λμ
μΌλ‘ κΈ°λ₯μ μΌλ‘ ν΄λμ€ν μ»΄ν¬λνΈμ μ μ¬ν κΈ°λ₯μ μνν μ μκ² λμμ΅λλ€. μ΅μ μ React μ ν리μΌμ΄μ
μμλ ν¨μν μ»΄ν¬λνΈμ Hooksλ₯Ό μ£Όλ‘ μ¬μ©νλ μΆμΈμ
λλ€.
ν΄λμ€ μ»΄ν¬λνΈ
ν΄λμ€ μ»΄ν¬λνΈλ React.Component ν΄λμ€λ₯Ό μμνμ¬ κ΅¬νν©λλ€.
import React from 'react';
class ClassComponent extends React.Component {
render() {
return (
<div>
<h1>Hello, Class Component!</h1>
<p>This is a simple class component.</p>
</div>
);
}
}
export default ClassComponent;
JavaScript
볡μ¬
ν΄λμ€ μ»΄ν¬λνΈλ React.Component λ₯Ό μμνμ¬ κ΅¬ννκΈ° λλ¬Έμ, React.Component κ° κ°μ§κ³ μλ μ»΄ν¬λνΈ μλͺ
μ£ΌκΈ°(λΌμ΄νμ¬μ΄ν΄) λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
import React, { Component } from 'react';
class LifecycleExample extends Component {
// μ΄ λ©μλλ μ»΄ν¬λνΈκ° DOMμ μΆκ°λ νμ μλμΌλ‘ νΈμΆλ©λλ€.
componentDidMount() {
console.log('μ»΄ν¬λνΈκ° λ§μ΄νΈλμμ΅λλ€.');
}
// μ΄ λ©μλλ μ»΄ν¬λνΈκ° DOMμμ μ κ±°λκΈ° μ μ μλμΌλ‘ νΈμΆλ©λλ€.
componentWillUnmount() {
console.log('μ»΄ν¬λνΈκ° μΈλ§μ΄νΈλ μμ μ
λλ€.');
}
// render λ©μλλ λͺ¨λ React μ»΄ν¬λνΈμμ νμμ μΌλ‘ μ‘΄μ¬ν΄μΌ ν©λλ€.
render() {
return <div>μ»΄ν¬λνΈ λΌμ΄νμ¬μ΄ν΄ μμ </div>;
}
}
JavaScript
볡μ¬
μμ ν΄λμ€λ LifecycleExampleμ΄λΌλ React μ»΄ν¬λνΈλ₯Ό μ μν©λλ€. React λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ Component ν΄λμ€λ₯Ό νμ₯νκ³ μμ΅λλ€.
componentDidMount λ©μλλ μ»΄ν¬λνΈκ° DOMμ μΆκ°λ ν μλμΌλ‘ νΈμΆλλ©°, μ£Όλ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ λ± μ»΄ν¬λνΈκ° DOMμ μΆκ°λ νμ μνν΄μΌ ν μμ
μ μ¬μ©λ©λλ€.
componentWillUnmount λ©μλλ μ»΄ν¬λνΈκ° DOMμμ μ κ±°λκΈ° μ μ μλμΌλ‘ νΈμΆλλ©°,
리μμ€ μ 리λ λ€νΈμν¬ μμ² λ± μΈλ§μ΄νΈλκΈ° μ μ μ²λ¦¬ν΄μΌ ν μμ
μ μ¬μ©λ©λλ€.
render λ©μλλ λͺ¨λ React μ»΄ν¬λνΈμμ νμμ μΌλ‘ μ‘΄μ¬ν΄μΌ ν©λλ€. μ΄ λ©μλμμλ μ»΄ν¬λνΈμ UI ꡬ쑰λ₯Ό μ μνκ³ μμ΅λλ€.
μ°Έκ³ : νλμ μΈ React κ°λ°μμλ ν¨μν μ»΄ν¬λνΈμ Hooksκ° μ μ°¨ λ λ§μ΄ μ¬μ©λκ³ μμ΅λλ€.
ν¨μν μ»΄ν¬λνΈ vs ν΄λμ€ μ»΄ν¬λνΈ
React 16.8 Hooks μ λμ
μΌλ‘ ν¨μν μ»΄ν¬λνΈμμλ μνκ΄λ¦¬ λ° λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©ν μ μκ² λ¨μΌλ‘μ¨, μ΅μ React μμλ ν¨μν μ»΄ν¬λνΈ+Hooks κ° νΈλλκ° λμμ΅λλ€.
ν΄λμ€ μ»΄ν¬λνΈλ React.Component λ₯Ό μμνμ¬ κ΅¬ννκΈ° λλ¬Έμ, React.Component κ° κ°μ§κ³ μλ μ»΄ν¬λνΈ μλͺ
μ£ΌκΈ°(λΌμ΄νμ¬μ΄ν΄) λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€. λν μ»΄ν¬λνΈμ state(μν)λ₯Ό κ΄λ¦¬ ν μ μμ΅λλ€.
μ΄κΈ°μλ ν¨μν μ»΄ν¬λνΈλ μνκ΄λ¦¬, μλͺ
μ£ΌκΈ° λ©μλλ₯Ό μ¬μ©ν μ μμμ΅λλ€.
νμ§λ§, React 16.8 λ²μ λΆν° Hooks λΌλ κ°λ
μ΄ λμ
λλ©΄μ, ν¨μν μ»΄ν¬λνΈμμλ μν κ΄λ¦¬μ λΌμ΄νμ¬μ΄ν΄ κΈ°λ₯μ μ¬μ©ν μ μκ² λμμ΅λλ€.
ν¨μν μ»΄ν¬λνΈμμλ μνλ₯Ό μ¬μ©νκ³ , λΆμ ν¨κ³Όλ₯Ό μ²λ¦¬ν μ μκ² λμ΄ ν¨μν μ»΄ν¬λνΈμ μ¬μ©μ±κ³Ό μ¬μ¬μ©μ±μ΄ ν₯μλμμ΅λλ€. Hooksλ ν΄λμ€ν μ»΄ν¬λνΈμμ μ 곡λλ κΈ°λ₯μ ν¨μν μ»΄ν¬λνΈμμλ μ¬μ©ν μ μκ² ν΄μ£Όλ κ²μ΄ μ£Όμ λͺ©μ μ€ νλμ
λλ€.
ν¨μν μ»΄ν¬λνΈλ κ°κ²°νκ³ κ°λ
μ±μ΄ μ’μΌλ©°, Hooksμ λμ
μΌλ‘ κΈ°λ₯μ μΌλ‘ ν΄λμ€ν μ»΄ν¬λνΈμ μ μ¬ν κΈ°λ₯μ μνν μ μκ² λμμ΅λλ€. μ΅μ μ React μ ν리μΌμ΄μ
μμλ ν¨μν μ»΄ν¬λνΈμ Hooksλ₯Ό μ£Όλ‘ μ¬μ©νλ μΆμΈμ
λλ€.
μ»΄ν¬λνΈ κ΅¬μ±μμ
β’
State (μν)
β’
Props (μμ±)
β’
Render Method (λ λ λ©μλ)
β’
Lifecycle Methods (μλͺ
μ£ΌκΈ° λ©μλ)
β’
Event Handling (μ΄λ²€νΈ μ²λ¦¬)
State (μν)
μ»΄ν¬λνΈκ° κ΄λ¦¬νλ λ‘컬(λ΄λΆ) λ°μ΄ν°
React μ»΄ν¬λνΈμ μν(State)λ μ»΄ν¬λνΈκ° κ΄λ¦¬νλ λ‘컬 λ°μ΄ν°μ
λλ€. μνλ₯Ό μ¬μ©νλ©΄ μ»΄ν¬λνΈκ° λμ μΈ λ°μ΄ν°λ₯Ό μ μ₯νκ³ νμν μ μμΌλ©°, μνκ° λ³κ²½λ λλ§λ€ Reactλ μλμΌλ‘ νλ©΄μ λ€μ λ λλ§ν©λλ€.
State μ νΉμ§
1.
μν μ΄κΈ°ν
: μ»΄ν¬λνΈκ° μμ±λ λ useState ν
μ΄λ ν΄λμ€ μ»΄ν¬λνΈμ constructor λ©μλμμ μ΄κΈ° μνλ₯Ό μ€μ ν©λλ€.
2.
μν μ
λ°μ΄νΈ
: setCountλ this.setStateλ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ
λ°μ΄νΈν©λλ€. μ΄λ μ΄μ μνλ₯Ό μ°Έμ‘°νμ¬ λ³κ²½μ μ§ννλ κ²μ΄ μ€μν©λλ€.
3.
μ»΄ν¬λνΈλ³λ‘ κ³ μ ν μν
: κ°κ°μ μΈμ€ν΄μ€λ μ체 μνλ₯Ό μ μ§νλ―λ‘, λμΌν μ»΄ν¬λνΈμ μ¬λ¬ μΈμ€ν΄μ€ κ°μλ κ°κ° λ
립μ μΈ μνκ° μ‘΄μ¬ν©λλ€.
μ€μ΅ μ½λ
1.
리μ‘νΈ νλ‘μ νΈ μμ±
2.
Component/ClassComponent.jsx
3.
Component/FunctionComponent.jsx
4.
App.js
5.
μλ² μ€ν
리μ‘νΈ νλ‘μ νΈ μμ±
npx create-react-app state-app
Shell
볡μ¬
Component/ClassComponent.jsx
import React from 'react'
class ClassComponent extends React.Component {
constructor(props) {
super(props);
// μν μ μ
this.state = {
name: "Aloha",
};
// this λ°μΈλ©
this.handleClickAloha = this.handleClickAloha.bind(this);
this.handleClickJoeun = this.handleClickJoeun.bind(this);
}
handleClickAloha() {
console.log('Aloha Click!');
// μν μ€μ
this.setState({ name: 'Aloha' });
}
handleClickJoeun() {
console.log('Joeun Click!');
// μν μ€μ
this.setState({ name : 'Joeun' });
}
render() {
const { name } = this.state;
return (
<div>
<h1>ν΄λμ€ μ»΄ν¬λνΈ</h1>
<h2>Hello I'm {name}</h2>
<button onClick={this.handleClickAloha}>Aloha</button>
<button onClick={this.handleClickJoeun}>Joeun</button>
</div>
)
}
}
export default ClassComponent
JavaScript
볡μ¬
ν΄λμ€ μ»΄ν¬λνΈμμλ,
μμ±μμμ this.state = {}; ννλ‘ μν(state) λ₯Ό μ μν©λλ€.
this.setState(); λ§€μλλ₯Ό νΈμΆνμ¬ μν(state)λ₯Ό μ
λ°μ΄νΈν©λλ€.
Component/FunctionComponent.jsx
import React, { useState } from 'react';
const FunctionComponent = () => {
// useStateλ₯Ό μ¬μ©νμ¬ nameμ΄λΌλ μνμ μ΄λ₯Ό κ°±μ ν μ μλ setName ν¨μλ₯Ό μ μΈ
const [name, setName] = useState('Aloha');
// handleClick ν¨μ μ μ
const handleClick = (newName) => {
console.log(`${newName} Click!`);
// setName ν¨μλ₯Ό μ¬μ©νμ¬ name μνλ₯Ό κ°±μ
setName(newName);
};
return (
<div>
<h1>ν¨μν μ»΄ν¬λνΈ</h1>
<h2>Hello I'm {name}</h2>
{/* λ²νΌ ν΄λ¦ μ handleClick ν¨μ νΈμΆ */}
<button onClick={() => handleClick('Aloha')}>Aloha</button>
<button onClick={() => handleClick('Joeun')}>Joeun</button>
</div>
);
};
export default FunctionComponent;
JavaScript
볡μ¬
ν¨μν μ»΄ν¬λνΈμμλ,
this.setStateκ° μλ useState ν
μ μ΄μ©νμ¬ μνλ₯Ό κ΄λ¦¬ν©λλ€.
useState ν
μ λ°°μ΄μ λ°ννλλ°, 첫 λ²μ§Έ μμλ νμ¬ μνκ°μ΄κ³ , λ λ²μ§Έ μμλ μνλ₯Ό μ
λ°μ΄νΈνλ ν¨μμ
λλ€.
const [name, setName] = useState('Aloha');
JavaScript
볡μ¬
1.
useState('Aloha') ν¨μκ° λ°°μ΄μ λ°ν
a.
[0]
βAlohaβ (μ΄κΈ°κ°)
b.
[1]
μνκ°μ μ
λ°μ΄νΈνλ ν¨μ
2.
name = βAlohaβ
3.
setName = (μ
λ°μ΄νΈ ν¨μ)
"μΈν° ν¨μ(setter function)β
β’
ex) name - setName
μΌλ°μ μΌλ‘ Reactμμλ μν λ³μμ ν΄λΉ μνλ₯Ό μ
λ°μ΄νΈνλ ν¨μλ₯Ό μ μν λ, μν λ³μμ μ΄λ¦μλ ν΄λΉ μνμ κ°μ΄, κ·Έλ¦¬κ³ μ
λ°μ΄νΈ ν¨μμ μ΄λ¦μλ 'set'μ μ λμ΄λ‘ λκ³ κ·Έ λ€μ μν λ³μμ μ΄λ¦μ CamelCaseλ‘ μμ±νλ κ²μ΄ κ΄λ‘μ
λλ€.
App.js
import logo from './logo.svg';
import './App.css';
import ClassComponent from './component/ClassComponent';
import FunctionComponent from './component/FunctionComponent';
function App() {
return (
<>
<ClassComponent />
<hr></hr>
<FunctionComponent />
</>
);
}
export default App;
JavaScript
볡μ¬
μλ² μ€ν
npm start
Shell
볡μ¬
μ€ν κ²°κ³Ό - Aloha ν΄λ¦ μ
μ€ν κ²°κ³Ό - Joeun ν΄λ¦ μ
Props (μμ±)
λΆλͺ¨ μ»΄ν¬λνΈμμ μμ μ»΄ν¬λνΈλ‘ μ λ¬νκΈ° μν λ°μ΄ν°
properties μ μ€μλ§
μΈλΆμμ μ λ¬λλ λ§€κ°λ³μ. λΆλͺ¨ μ»΄ν¬λνΈμμ μμ μ»΄ν¬λνΈλ‘ λ°μ΄ν°λ₯Ό μ λ¬ν λ μ¬μ©λ©λλ€.
μ΄κ²μ΄ React μ»΄ν¬λνΈ κ°μ μ 보λ₯Ό μ£Όκ³ λ°λ μ£Όμ λ©μ»€λμ¦ μ€ νλμ
λλ€. λΆλͺ¨ μ»΄ν¬λνΈλ μμ μ»΄ν¬λνΈμκ² propsλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ λ¬νκ³ , μμ μ»΄ν¬λνΈλ μ΄λ₯Ό νμ©νμ¬ νλ©΄μ μ 보λ₯Ό νμνκ±°λ νΉμ λμμ μνν μ μμ΅λλ€.
Reactμμλ propsλ₯Ό ν΅ν λ¨λ°©ν₯ λ°μ΄ν° μ λ¬μ΄ μ£Όμν ν¨ν΄μ
λλ€.
λ¨, μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μΈ Redux, Context API λ±μ μ¬μ©νλ©΄ μ»΄ν¬λνΈ κ°μ λ°μ΄ν° νλ¦μ μ‘°κΈ λ μ μ°νκ² κ΄λ¦¬ν μ μμ΅λλ€.
μ€μ΅ μ½λ
1.
리μ‘νΈ νλ‘μ νΈ μμ±
2.
App.css
3.
Component/Card.jsx
4.
Component/CardList.jsx
5.
App.js
6.
μλ² μ€ν
리μ‘νΈ νλ‘μ νΈ μμ±
npx create-react-app props-app
Shell
볡μ¬
App.css
.card {
border: 1px solid #ccc; padding: 10px; margin: 10px;
}
CSS
볡μ¬
μΌλ°μ μΌλ‘ App.cssλ μ ν리μΌμ΄μ
μ λ°μ κ±Έμ³ μ μ©λλ μ€νμΌμ κ΄λ¦¬νλ λ° μ¬μ©λ©λλ€. index.cssλ μ£Όλ‘ μ μ μ€νμΌ μ€μ μ΄λ μ΄κΈ°ν μ€νμΌμ μ¬μ©λ©λλ€. κ°κ°μ μ»΄ν¬λνΈμ ν΄λΉνλ μ€νμΌμ λͺ¨λννκ³ App.cssμ importνμ¬ μ¬μ©νλ λ°©μλ νν μ¬μ©λ©λλ€.
μ¬λ¬ μ»΄ν¬λνΈμ 곡ν΅μΌλ‘ μ μ©λλ μ€νμΌμ App.cssμ λͺ¨μλκ³ , κ° μ»΄ν¬λνΈμμ νμν κ²½μ°μλ ν΄λΉ μ»΄ν¬λνΈμ νμΌ μμμ λͺ¨λνλ μ€νμΌμ μ μνλ κ²μ΄ μΌλ°μ μΈ κ΄λ‘μ
λλ€.
Component/Card.jsx
import React from 'react';
const Card = (props) => {
return (
<div className='card'>
<h3>{props.title}</h3>
<p>{props.content}</p>
</div>
);
};
export default Card;
JavaScript
볡μ¬
Component/CardList.jsx
import React from 'react';
import Card from './Card';
const CardList = () => {
// Card μ»΄ν¬λνΈμ μ λ¬ν λ°μ΄ν° λ°°μ΄
const cardData = [
{ no: 1, title: 'Card 1', content: 'Content for Card 1' },
{ no: 2, title: 'Card 2', content: 'Content for Card 2' },
{ no: 3, title: 'Card 3', content: 'Content for Card 3' },
];
return (
<div>
<h1>Card List</h1>
{/* <Card key={0} title={cardData[0].title} content={cardData[0].content} ></Card> */}
{/* <Card key={1} title={cardData[1].title} content={cardData[1].content} ></Card> */}
{/* <Card key={2} title={cardData[2].title} content={cardData[2].content} ></Card> */}
{cardData.map((card, index) => {
return <Card key={card.no} title={card.title} content={card.content} />
})}
</div>
);
};
export default CardList;
JavaScript
볡μ¬
App.js
import './App.css';
import CardList from './Component/CardList';
function App() {
return (
<>
<h1>Props μ€μ΅</h1>
<CardList />
</>
);
}
export default App;
JavaScript
볡μ¬
μλ² μ€ν
npm start
Shell
볡μ¬
μ€ν κ²°κ³Ό
Render Method (λ λ λ©μλ)
μ»΄ν¬λνΈκ° νλ©΄μ μ΄λ»κ² νμλ μ§λ₯Ό μ μνλ λ©μλ
render λ©μλλ React ν΄λμ€ μ»΄ν¬λνΈμμ κ°μ₯ μ€μν λ©μλ μ€ νλμ
λλ€. μ΄ λ©μλλ μ»΄ν¬λνΈμ UIλ₯Ό μ μνκ³ λ°νν©λλ€. render λ©μλλ ν΄λμ€ μ»΄ν¬λνΈκ° νλ©΄μ νμλ λλ§λ€ μλμΌλ‘ νΈμΆλλ©°, React μμ§μ μ΄λ₯Ό ν΅ν΄ λ°νλ UIλ₯Ό μ€μ DOMμ λ λλ§ν©λλ€.
기본ꡬ쑰
import React, { Component } from 'react';
class MyComponent extends Component {
render() {
// UIλ₯Ό λ°ννλ λΆλΆ
return (
<div>
<h1>Hello, World!</h1>
</div>
);
}
}
export default MyComponent;
JavaScript
볡μ¬
ν¨μν μ»΄ν¬λνΈμ λ λ λ©μλ
ν¨μν μ»΄ν¬λνΈμμλ render() λ©μλμμ΄, return μΌλ‘ λ λλ§μ λμ ν©λλ€.
ν¨μν μ»΄ν¬λνΈμμλ ν΄λμ€ μ»΄ν¬λνΈμ²λΌ λͺ
μμ μΈ render λ©μλκ° μμ΅λλ€. λμ , ν¨μν μ»΄ν¬λνΈ μμ²΄κ° λ λλ§μ λ΄λΉνλ μν μ ν©λλ€. ν¨μν μ»΄ν¬λνΈμμ UIλ₯Ό μ μνλ €λ©΄ λ¨μν ν¨μμ λ°νκ°μΌλ‘ JSXλ₯Ό μ¬μ©ν©λλ€.
import React from 'react';
const MyComponent = () => {
// UIλ₯Ό λ°ννλ λΆλΆ
return (
<div>
<h1>Hello, World!</h1>
</div>
);
};
export default MyComponent;
JavaScript
볡μ¬
Event Handling (μ΄λ²€νΈ μ²λ¦¬)
μ¬μ©μμ μνΈμμ©μ λν μλ΅μΌλ‘ λ°μνλ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ κΈ°λ₯
μ€μ΅ μ½λ
1.
리μ‘νΈ νλ‘μ νΈ μμ±
2.
Component/Product.jsx
3.
App.js
4.
μλ² μ€ν
리μ‘νΈ νλ‘μ νΈ μμ±
npx create-react-app event-app
Shell
볡μ¬
Component/Product.jsx
import React, { useState } from 'react'
const Product = () => {
// μν
const [quantity, setQuantity] = useState(1);
const price = 1000; // μν λ¨κ°
// μλ μ¦κ° ν¨μ
const increaseQuantity = () => {
setQuantity(quantity + 1);
};
// μλ κ°μ ν¨μ
const decreaseQuantity = () => {
if( quantity > 1 ) {
setQuantity(quantity - 1);
}
};
// μ΄ κ°κ²© κ³μ°
const totalPrice = price * quantity;
return (
<div>
<h2>μν μ 보</h2>
<ul>
<li>κ°κ²© : {price}</li>
<li>μλ : {quantity}</li>
<li>μ΄ κ°κ²© : {totalPrice}</li>
</ul>
<button onClick={increaseQuantity}>+</button>
<button onClick={decreaseQuantity}>-</button>
</div>
)
}
export default Product
JavaScript
볡μ¬
App.js
import logo from './logo.svg';
import './App.css';
import ClassComponent from './component/ClassComponent';
import FunctionComponent from './component/FunctionComponent';
function App() {
return (
<>
<Product />
</>
);
}
export default App;
JavaScript
볡μ¬
μλ² μ€ν
npm start
Shell
볡μ¬










