π« : μ΄ κΈμ VeloPert λμ΄ λ§λμ μ±
리μ‘νΈλ₯Ό λ€λ£¨λ κΈ°μ
λ‘ κ³΅λΆν λ΄μ©μ ν λλ‘ μ¬λ¦½λλ€.
μ΄λ² κΈμμλ μ»΄ν¬λνΈ
μ λν΄ μμλ³΄λ €κ³ νλ€. π¨βπ»
μ¬μ©μ μΈν°νμ΄μ€(UI)λ₯Ό ꡬμΆνκΈ° μν΄ μ¬μ¬μ© κ°λ₯ν μμμ΄λ€.
κ° μ»΄ν¬λνΈλ μ체μ μΌλ‘ λ 립μ μ΄λ©°, μν(state)μ μμ±(props)μ κ°μ§ μ μλ€.
μ»΄ν¬λνΈμ κΈ°λ₯μ λ€μκ³Ό κ°μ΄ μ΄λ£¨μ΄μ§λ€.
μ»΄ν¬λνΈλ₯Ό μ μΈν μ μλ λ°©μμ λ κ°μ§μ΄λ€.
ν΄λμ€ν μ»΄ν¬λνΈμ ꡬ쑰λ μλμ κ°μ΄ μ΄λ£¨μ΄μ§λ€.
import { Component } from 'react';
class App extends Component {
render() {
const name = 'react';
return <div className="react"> {name} </div>;
}
}
ν΄λμ€ν μ»΄ν¬λνΈμ κ²½μ° state
κΈ°λ₯ λ° λΌμ΄νμ¬μ΄ν΄ κΈ°λ₯μ μ¬μ©ν μ μμΌλ©°
μμ λ©μλλ₯Ό μ μν μ μλ€.
β οΈ μ€μ μ¬ν
render
ν¨μκ° μμ΄μΌ νλ€.JSX
λ₯Ό λ°νν΄μΌνλ€.ν¨μν μ»΄ν¬λνΈλ λ€μκ³Ό κ°μ κ΅¬μ‘°λ‘ μ΄λ£¨μ΄μ§λ€.
const MyComponent = () => {
return <div> 리μ‘νΈ μ΄λ ΅λ€. </div>
};
export default MyComponent;
μ¬κΈ°μ ν¨μλ₯Ό μμ±ν λ function
ν€μλκ° μλ ES6μμ λμ
λ νμ΄ν ν¨μλ‘ μμ±νλ€.
ν¨μλ₯Ό νλΌλ―Έν°λ‘ μ λ¬ν λ μ¬μ©νλ λ¬Έλ²μ΄λ©°, ES6 λ¬Έλ²μμ ν¨μλ₯Ό νννλ λ°©μ
// κΈ°μ‘΄μ ν¨μ μ μΈ λ°©μ
setTimeout(function () {
console.log("Hello World !");
}, 1000);
// ES6 - νμ΄ν ν¨μ
setTimeout(() => {
console.log("Hello World !");
}, 1000);
κΈ°μ‘΄ ν¨μμ νμ΄ν ν¨μμ μ°¨μ΄μ μ κ°λ¦¬ν€λ κ°μ²΄κ° λ€λ₯΄λ€.
μΌλ° ν¨μμ κ²½μ°λ μμ μ΄ μ’
μλ κ°μ²΄λ₯Ό this
λ‘ κ°λ¦¬ν¨λ€.
νμ΄ν ν¨μμ κ²½μ°λ μμ μ΄ μ’
μλ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€.
props
μ»΄ν¬λνΈμ μμ±μ μ€μ ν λ μ¬μ©νλ μμμ΄λ€.
props
λ properties
λ₯Ό μ€μΈ ννμΌλ‘ props
κ°μ ν΄λΉ μ»΄ν¬λνΈλ₯Ό λΆλ¬μ μ¬μ©νλ λΆλͺ¨ μ»΄ν¬λνΈμμ μ€μ νλ€.
props
μ κ°μ μ§μ νμ§ μμμ λμ κΈ°λ³Έκ° μ€μ : defaultProps
const MyInfoComponent = props => {
return (
<div>
μλ
νμΈμ. μ μ΄λ¦μ {props.myName} μ΄μμ!
</div>;
);
}
MyInfoComponent.defaultProps = {
myName : 'κΈ°λ³Έ μ΄λ¦'
};
export defualt MyInfoComponent;
ES6μ λΉκ΅¬μ‘°ν ν λΉ λ¬Έλ²μ μ΄μ©νμ¬ λ΄λΆ κ°μ λ°λ‘ μΆμΆν μ μλ λ°©λ²μ΄ μλ€.
μ΄λ₯Ό μ΄μ©ν κ²½μ° λ§μ props
μ κ°μ νΈλ€λ§ν μ μλ€.
import React from "react";
const Props = (props) => {
// κ°μ²΄ λΉκ΅¬μ‘°ν ν λΉ
const { nickname, age, job } = props;
return (
<div>
λ΄ λλ€μ : {nickname} <br />
λ΄ λμ΄ : {age} <br />
λ΄ μ§μ
: {job} <br />
</div>
);
};
export default Props;
μ΄ λΏλ§ μλλΌ ν¨μμ νλΌλ―Έν°κ° κ°μ²΄μΌ κ²½μ° ν΄λΉ κ°μ λ°λ‘ λΉκ΅¬μ‘°ννμ¬ μ¬μ© κ°λ₯νλ€.
import React from "react";
// νλΌλ―Έν°μ κ°μ²΄λ₯Ό λ°λ‘ μ λ¬!
const Props = ({ nickname, age, job }) => {
return (
<div>
λ΄ λλ€μ : {nickname} <br />
λ΄ λμ΄ : {age} <br />
λ΄ μ§μ
: {job} <br />
</div>
);
};
export default Props;
propTypes
(props
νμ
κ²μ¦)μ»΄ν¬λνΈμμ νμ props
λ₯Ό μλ €μ£Όκ±°λ prop
μ νμ
μ μ§μ ν λλ propTypes
λ₯Ό μ¬μ©νλ€.
β οΈ μ€μ μ¬ν
import
ꡬ문μ ν΅ν΄ PropTypes
λ₯Ό λΆλ¬μμΌ ν¨.μ¬μ© μμλ λ€μκ³Ό κ°λ€.
import React from "react";
import PropTypes from "prop-types";
const PropType = ({ name, age }) => {
return (
<div>
λ΄ μ΄λ¦ : {name} <br/>
λ΄ λμ΄ : {age}
</div>
);
};
PropTypes.propTypes = {
name: PropType.string, // λ¬Έμμ΄λ§ λ°λλ‘ μ§μ
age: PropType.number.isRequired, // μ«μλ§ λ°λλ‘ μ§μ , κ°μ΄ νμλ‘ λ€μ΄μμΌ νλ€.
};
export default PropTypes;
state
μ»΄ν¬λνΈ λ΄λΆμμ λ°λ μ μλ κ°μ μλ―Ένλ€.
μ¬κΈ°μ props
μ μ°¨μ΄μ μ props
μ κ²½μ° μ»΄ν¬λνΈκ° μ¬μ©λλ κ³Όμ μμ λΆλͺ¨ μ»΄ν¬λνΈκ° μ€μ νλ κ°μ΄λ€. λ°λΌμ μ»΄ν¬λνΈ μμ μ ν΄λΉ props
λ₯Ό μ½κΈ° μ μ©μΌλ‘λ§ μ¬μ©μ΄ κ°λ₯ν¨.
μ¬κΈ°μ props
λ₯Ό λ°κΎΈλ €λ©΄ λΆλͺ¨ μ»΄ν¬λνΈμμ λ°κΏμ€μΌ νλ€.
β οΈ μ€μ μ¬ν
μ§μ μμ νμ§ λ§κ³ setState
λ₯Ό μ¬μ©νλ€.
μνλ₯Ό λ³κ²½ν λλ μ§μ μμ νλ κ²μ΄ μλλΌ setState() λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€.
μ΄λ 리μ‘νΈμ μν μ
λ°μ΄νΈλ₯Ό κ΄λ¦¬νκ³ μ»΄ν¬λνΈμ λ λλ§μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν¨μ΄λ€.
μνλ λΆλ³μ±μ μ μ§ν΄μΌ νλ€.
setState()
λ©μλλ₯Ό νΈμΆνμ¬ μνλ₯Ό μ
λ°μ΄νΈν λ μ΄μ μνλ₯Ό μ§μ λ³κ²½νμ§ μκ³ ,
μλ‘μ΄ μν κ°μ²΄λ₯Ό μμ±νμ¬ μ¬μ©ν΄μΌ νλ€.
λΉλκΈ°λ‘ μνλ₯Ό μ
λ°μ΄νΈν μ μλ€.
setState()
λ©μλλ λΉλκΈ°λ‘ λμν μ μλ€.
μ¬λ¬ λ²μ μν μ
λ°μ΄νΈκ° μμ κ²½μ°, μ΄μ μνμ μμ‘΄νλ κ²½μ°μλ ν¨μν μ
λ°μ΄νΈλ μ½λ°± ν¨μλ₯Ό μ¬μ©νμ¬ μμ μ μΌλ‘ μνλ₯Ό μ
λ°μ΄νΈν΄μΌ νλ€.
μν μ΄κΈ°νλ μμ±μ λλ useState() ν
μ μ¬μ©νλ€.
ν΄λμ€ μ»΄ν¬λνΈμμλ μμ±μλ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ΄κΈ°νν μ μλ€. ν¨μ μ»΄ν¬λνΈμμλ useState()
ν
μ μ¬μ©νμ¬ μ΄κΈ° μνλ₯Ό μ€μ ν μ μλ€.
λ΄κ° λ°°μ΄ λ΄μ©μΌλ‘ μμ±ν ꡬ쑰λ λ€μκ³Ό κ°μλ€.
import React, { useState } from "react";
/* useState μ¬μ©ν΄λ³΄κΈ°.
Hooks & λΉκ΅¬μ‘°ν ν λΉ μ΄μ© */
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;
ν΄λΉ μ½λμ κΈ°λ₯μ ν μ»΄ν¬λνΈ λ΄λΆμμ useState
λ₯Ό μ¬μ©ν΄ λ²νΌ μ
λ ₯μ λ°λ₯Έ ν
μ€νΈμ μμμ΄ λ³κ²½λλ κΈ°λ₯μ κ°κ³ μλ€.
μ¬κΈ°μ message
μ setMessage
κ° λ΄κΈ΄ λ°°μ΄μ λΉκ΅¬μ‘°ν ν λΉνμ¬ μ²« λ²μ§Έ μμλ₯Ό νμ¬ μν, λλ² μ§Έ μμλ μνλ₯Ό λ°κΎΈμ΄ μ£Όλ ν¨μμ΄λ€. μ΄ ν¨μλ₯Ό μΈν° ν¨μλΌκ³ λΆλ₯Έλ€!
λ€μμ λ λλ§ν κ²°κ³Όμ΄λ€.
props
μ state
λ λ€ λΉμ·ν΄ λ³΄μΌ μ μμ§λ§ μν μ΄ λ§€μ° λ€λ₯΄λ€.
props
μ κ²½μ° λΆλͺ¨ μ»΄ν¬λνΈκ° μ€μ νκ³ state
μ κ²½μ° μ»΄ν¬λνΈ μ체μ μΌλ‘ μ§λ κ°μΌλ‘ μ»΄ν¬λνΈ λ΄λΆμμ κ°μ μ
λ°μ΄νΈ ν μ μλ μ°¨μ΄μ μ΄ μλ€.
νμ§λ§ props
λ₯Ό μ¬μ©νλ€κ³ ν΄μ ν΄λΉ κ°μ΄ 무쑰건 κ³ μ λλ κ²μ΄ μλλ©° λΆλͺ¨ μ»΄ν¬λνΈμ state
λ₯Ό μμ μ»΄ν¬λνΈμ props
μ μ λ¬ν΄ νΈμΆνλ©΄ props
λ μ λμ μΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€λ κ²μ΄λ€.
Reference
- λμ : 리μ‘νΈλ₯Ό λ€λ£¨λ κΈ°μ π
- React 곡μ μ¬μ΄νΈ