μ리먼νΈ
Key
Keyλ Reactμμ λμ μΌλ‘ μμ±λλ μ»΄ν¬λνΈ λ¦¬μ€νΈμμ κ° μμκ° κ³ μ νκ² μλ³λλλ‘ λλ μν μ ν©λλ€. Keyλ Reactκ° μ»΄ν¬λνΈ λ¦¬μ€νΈλ₯Ό μ λ°μ΄νΈν λ μ¬μ©λ©λλ€. Keyκ° μλ κ²½μ° λ¦¬μ€νΈμ μμκ° λ°λκ±°λ μμ΄ν μ΄ μΆκ°/μμ λ λ Reactλ μ΄μ μ λ λλ§λ κ²°κ³Όλ₯Ό κΈ°λ°μΌλ‘ λ³κ²½μ¬νμ κ³μ°νκ² λκ³ , μ΄λ λ³κ²½μ¬νμ΄ μμκ³Ό λ€λ₯Ό μ μμ΅λλ€. Keyλ₯Ό μ¬μ©νλ©΄ Reactλ κ° μμ΄ν μ΄ κ³ μ ν IDλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ³κ²½μ¬νμ λ μ ννκ² κ³μ°ν μ μμ΅λλ€.
var items = ['μ°μ΄ 500κ·Έλ¨', 'μ£ 1 μ»΅', 'λ²ν° μμΆ 2μ»΅', 'μλ‘ μ€μΏΌμ(Yellow Squash, νΈλ°μ ν μ’
λ₯) 1κ°', 'μ¬λ¦¬λΈ μ€μΌ 1/2 μ»΅', 'λ§λ 3 μͺ½']
var dish = React.createElement('ul', {className: 'ingredients'},
items.map(ingredients => React.createElement('li', null, ingredients))
);
console.log('dish', dish);
function init() {
var container = document.querySelector('.react-container');
ReactDOM.render(dish, container);
}
window.addEventListener('load', init);
var items = ['μ°μ΄ 500κ·Έλ¨', 'μ£ 1 μ»΅', 'λ²ν° μμΆ 2μ»΅',
'μλ‘ μ€μΏΌμ(Yellow Squash, νΈλ°μ ν μ’
λ₯) 1κ°',
'μ¬λ¦¬λΈ μ€μΌ 1/2 μ»΅', 'λ§λ 3 μͺ½']
var dish = React.createElement('ul', {className: 'ingredients'},
items.map((ingredients, i) => React.createElement('li', {key: i}, ingredients))
);
console.log('dish', dish);
function init() {
var container = document.querySelector('.react-container');
ReactDOM.render(dish, container);
}
window.addEventListener('load', init);
μ μ½λλ Reactλ₯Ό μ¬μ©νμ¬ items
λΌλ 리μ€νΈλ₯Ό νμνλ <ul>
μ리먼νΈλ₯Ό μμ±νλ μμ μ
λλ€. items
리μ€νΈλ₯Ό map()
ν¨μλ₯Ό μ¬μ©νμ¬ <li>
μ리먼νΈλ‘ λ³ννκ³ , key
propμ μ¬μ©νμ¬ κ°κ°μ <li>
μ리먼νΈμ κ³ μ ν ID κ°μ λΆμ¬ν©λλ€. μ΄λ κ² ν¨μΌλ‘μ¨ Reactλ μ
λ°μ΄νΈμ λμ± μ ννκ² λ°λ λΆλΆμ μΈμν μ μκ² λ©λλ€.
λ§μ§λ§μΌλ‘, ReactDOM.render()
ν¨μλ₯Ό μ¬μ©νμ¬ dish
μ리먼νΈλ₯Ό .react-container
μ λ λλ§ν©λλ€.
μ»΄ν¬λνΈ
μ»΄ν¬λνΈλ UIλ₯Ό ꡬμ±νλ λ 립μ μΈ λͺ¨λμ λλ€. μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ©΄ UIλ₯Ό μ¬λ¬ κ°μ μ¬μ¬μ© κ°λ₯ν μ‘°κ°μΌλ‘ λλ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ΄ μ¦κ°νκ² λ©λλ€.
Reactμμ λͺ¨λ UI μμλ μ»΄ν¬λνΈλ‘ λλ μ μμ΅λλ€. μ΄λ κ² λλ μ»΄ν¬λνΈλ€μ μ€μ²©νμ¬ μ¬μ©ν μ μμΌλ©°, κ°κ°μ μ»΄ν¬λνΈλ λ 립μ μΌλ‘ μλν©λλ€.
μμ
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
ReactDOM.render(
<Greeting name="React"/>,
document.getElementById('root')
);
μ μ½λλ Greeting
μ΄λΌλ μ»΄ν¬λνΈλ₯Ό μμ±νκ³ , ReactDOM.render()
ν¨μλ₯Ό μ¬μ©νμ¬ Greeting
μ»΄ν¬λνΈλ₯Ό λ λλ§νλ μμ μ
λλ€. Greeting
μ»΄ν¬λνΈλ name
propμ
λ°μμμ Hello, {name}!
μ΄λΌλ λ©μμ§λ₯Ό νμν©λλ€. μ΄λ κ² νλ©΄ name
propμ΄ λ³κ²½λ λλ§λ€ μ»΄ν¬λνΈκ° μ
λ°μ΄νΈλμ΄ μλ‘μ΄ λ©μμ§λ₯Ό νμνκ² λ©λλ€.
function Button(props) {
return (
<button onClick={props.onClick}>
{props.label}
</button>
);
}
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: 0};
}
handleClick() {
this.setState(state => ({
count: state.count + 1
}));
}
render() {
return (
<div>
<p>You clicked {this.state.count} times.</p>
<Button
onClick={() => this.handleClick()}
label="Click me"
/>
</div>
);
}
}
ReactDOM.render(
<Counter/>,
document.getElementById('root')
);
μ μ½λλ Button
κ³Ό Counter
λΌλ λ κ°μ μ»΄ν¬λνΈλ₯Ό μμ±νκ³ , ReactDOM.render()
ν¨μλ₯Ό μ¬μ©νμ¬ Counter
μ»΄ν¬λνΈλ₯Ό λ λλ§νλ μμ μ
λλ€. Button
μ»΄ν¬λνΈλ onClick
propμ λ°μμμ λ²νΌμ ν΄λ¦νμ λ onClick
ν¨μλ₯Ό νΈμΆν©λλ€. Counter
μ»΄ν¬λνΈλ count
stateλ₯Ό κ°μ§κ³ μμΌλ©°, λ²νΌμ ν΄λ¦ν λλ§λ€ count
κ°μ μ¦κ°μν΅λλ€. μ΄λ κ² νλ©΄ νλ©΄μλ βYou clicked {count} timesβλΌλ λ©μμ§μ βClick meβλΌλ λ²νΌμ΄ νμλ©λλ€.
ν¨μν μ»΄ν¬λνΈ
ν¨μν μ»΄ν¬λνΈλ ν¨μλ‘ κ΅¬νλ μ»΄ν¬λνΈμ΄λ©°, props
λ₯Ό μΈμλ‘ λ°μμ JSXλ₯Ό λ°νν©λλ€.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
ν¨μν μ»΄ν¬λνΈλ μν(state)λ₯Ό κ°μ§μ§ μμΌλ©°, λΌμ΄νμ¬μ΄ν΄ λ©μλ(componentDidMount
, componentWillUnmount
, λ±)λ₯Ό μ¬μ©ν μ μμ΅λλ€. νμ§λ§ μ»΄ν¬λνΈμ μν μ΄ λ¨μν
κ²½μ°, ν΄λμ€ν μ»΄ν¬λνΈ λμ ν¨μν μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ κ²μ΄ λ ν¨μ¨μ μ
λλ€.
ν¨μν μ»΄ν¬λνΈμ μ₯μ :
- μ½λκ° κ°κ²°νκ³ λͺ νν©λλ€.
- ν΄λμ€ν μ»΄ν¬λνΈλ³΄λ€ μ±λ₯μ΄ λ μ’μ΅λλ€.
- μνλ₯Ό κ°μ§μ§ μμΌλ―λ‘ μμΈ‘ κ°λ₯νλ©° ν μ€νΈνκΈ° μ½μ΅λλ€.
ν¨μν μ»΄ν¬λνΈμ λ¨μ :
- λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
- μνλ₯Ό κ°μ§μ§ μμΌλ―λ‘, μνλ₯Ό λ³κ²½ν μ μμ΅λλ€.
ν΄λμ€ν μ»΄ν¬λνΈ
ν΄λμ€ν μ»΄ν¬λνΈλ React.Component
ν΄λμ€λ₯Ό μμλ°μμ ꡬνλ©λλ€. render()
λ©μλλ₯Ό ꡬννμ¬ JSXλ₯Ό λ°νν©λλ€.
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
s
ν΄λμ€ν μ»΄ν¬λνΈλ μν(state)λ₯Ό κ°μ§λ©°, λΌμ΄νμ¬μ΄ν΄ λ©μλ(componentDidMount
, componentWillUnmount
, λ±)λ₯Ό μ¬μ©ν μ μμ΅λλ€. μνλ₯Ό λ³κ²½ν μ μμΌλ―λ‘, μνμ
λ°λΌ UIλ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ° ν΄λμ€ν μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
ν΄λμ€ν μ»΄ν¬λνΈμ μ₯μ :
- μν(state)λ₯Ό κ°μ§λ―λ‘, μνμ λ°λΌ UIλ₯Ό λ³κ²½ν μ μμ΅λλ€.
- λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
ν΄λμ€ν μ»΄ν¬λνΈμ λ¨μ :
- μ½λκ° λ³΅μ‘νκ³ , ν¨μν μ»΄ν¬λνΈλ³΄λ€ μ±λ₯μ΄ λ λ¨μ΄μ§λλ€.
- μν(state)λ₯Ό κ°μ§λ―λ‘ μμΈ‘νκΈ° μ΄λ ΅κ³ , ν μ€νΈνκΈ° μ΄λ ΅μ΅λλ€.
μμ
// ν¨μν μ»΄ν¬λνΈ μμ
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
// ν΄λμ€ν μ»΄ν¬λνΈ μμ
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
μ μμ μμ Welcome
μ»΄ν¬λνΈλ ν¨μν μ»΄ν¬λνΈμ ν΄λμ€ν μ»΄ν¬λνΈ λ κ°μ§ λ°©μμΌλ‘ ꡬνλμμ΅λλ€. Welcome
μ»΄ν¬λνΈλ props
λ₯Ό λ°μμ Hello, {props.name}!
μ΄λΌλ
λ©μμ§λ₯Ό νμν©λλ€.
μλ λ°©μκ³Ό μμ¦ ν΄λμ€
// μλ λ°©μ -> μμ±μ ν¨μλ₯Ό μ΄μ©ν λͺ
μμ ...
// ν¨μμ΄λ¦μ΄ λλ¬Έμλ‘ μμνλ©΄ μμ±μ ν¨μ
function Vacation(destination, length) {
this.destination = destination;
this.length = length;
}
Vacation.prototype.print = function () {
console.log('μ΄λ² ν΄κ°λ ' + this.destination + 'μΌλ‘ ' + this.length + 'λ λ¨')
};
var obj = new Vacation('νμμ΄', 10);
obj.print();
class Vacation {
constructor(destination, length) {
this.destination = destination;
this.length = length;
}
print() {
console.log('μ΄λ² ν΄κ°λ ' + this.destination + 'μΌλ‘ ' + this.length + 'λ λ¨')
};
}
obj = new Vacation('νμμ΄', 10);
obj.print();
κ°μ²΄ ꡬ쑰 λΆν΄
κ°μ²΄ ꡬ쑰 λΆν΄λ μλ°μ€ν¬λ¦½νΈμ κΈ°λ₯ μ€ νλλ‘, κ°μ²΄μμ μμ±μ μΆμΆνκ³ λ³μμ ν λΉνλ κ²μ λ κ°κ²°νκ³ κ°λ μ± λμ λ°©λ²μΌλ‘ ν μ μκ² ν©λλ€.
λ€μμ μμμ λλ€:
const person = {
name: 'John',
age: 30,
location: 'New York'
};
const {name, age, location} = person;
console.log(name); // μΆλ ₯: 'John'
console.log(age); // μΆλ ₯: 30
console.log(location); // μΆλ ₯: 'New York'
μ΄ μμμμλ person
μ΄λΌλ κ°μ²΄κ° μΈ κ°μ μμ±, μ¦ name
, age
, location
μ κ°μ§κ³ μμ΅λλ€. κ°μ²΄ ꡬ쑰 λΆν΄λ₯Ό μ¬μ©νμ¬ μ΄λ¬ν μμ±λ€μ μΆμΆνκ³ κ°μ μ΄λ¦μ λ³μμ ν λΉν©λλ€.
κ·Έλ¬λ©΄ μ΄ λ³μλ€μ μ¬μ©νμ¬ κ°μ²΄μμ ν΄λΉ κ°μ κ°μ Έμ¬ μ μμ΅λλ€.
κ°μ²΄ ꡬ쑰 λΆν΄λ ν¨μ 맀κ°λ³μλ₯Ό λ€λ£° λ λ§€μ° μ μ©ν©λλ€. λ€μμ μμμ λλ€:
function printPersonInfo({name, age, location}) {
console.log(`Name: ${name}`);
console.log(`Age: ${age}`);
console.log(`Location: ${location}`);
}
const person = {
name: 'John',
age: 30,
location: 'New York'
};
printPersonInfo(person);
μ΄ μμμμλ κ°μ²΄λ₯Ό 맀κ°λ³μλ‘ λ°λ printPersonInfo
ν¨μλ₯Ό μ μνκ³ , κ°μ²΄ ꡬ쑰 λΆν΄λ₯Ό μ¬μ©νμ¬ name
, age
, location
μμ±μ μΆμΆν©λλ€. κ·Έλ° λ€μ μ΄ λ³μλ€μ μ¬μ©νμ¬
κ°μ²΄μμ ν΄λΉ κ°μ μΆλ ₯ν©λλ€.
κ°μ²΄ ꡬ쑰 λΆν΄λ μ€μ²©λ κ°μ²΄μ λ°°μ΄μμλ μ¬μ©ν μ μμ΅λλ€. λ€μμ μμμ λλ€:
const person = {
name: 'John',
age: 30,
location: {
city: 'New York',
state: 'NY'
},
hobbies: ['reading', 'traveling', 'hiking']
};
const {name, location: {city}, hobbies: [firstHobby]} = person;
console.log(name); // μΆλ ₯: 'John'
console.log(city); // μΆλ ₯: 'New York'
console.log(firstHobby); // μΆλ ₯: 'reading'
μ΄ μμμμλ μ€μ²©λ μμ±κ³Ό λ°°μ΄μ΄ ν¬ν¨λ κ°μ²΄λ₯Ό μ¬μ©ν©λλ€. κ°μ²΄ ꡬ쑰 λΆν΄λ₯Ό μ¬μ©νμ¬ μ€μ²©λ location
μμ±μμ city
μμ±κ³Ό hobbies
λ°°μ΄μμ 첫 λ²μ§Έ μ·¨λ―Έλ₯Ό μΆμΆν©λλ€.
μ΄κ΄μ μΌλ‘, κ°μ²΄ ꡬ쑰 λΆν΄λ μλ°μ€ν¬λ¦½νΈμ κ°λ ₯ν κΈ°λ₯ μ€ νλλ‘, μ½λλ₯Ό λ κ°κ²°νκ³ κ°λ μ± μ’κ² λ§λ€μ΄ μ€λλ€.
리ν°λ΄κ°μ²΄ = μμμ λ°©λ²μΌλ‘ λ§λ κ°μ²΄ β 리ν°λ΄κ°μ²΄ κ°μ
리ν°λ΄κ°μ²΄λ λ³μμ ν λΉλλ κ°μ²΄ νκΈ°λ² μ€ νλλ‘, μ€κ΄νΈ({}) μμ μμ±(key)κ³Ό κ°(value)μ μΌν(,)λ‘ κ΅¬λΆνμ¬ μμ±νλ κ²μ λλ€. μ΄λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μ½κ³ κ°νΈνκ² μμ±ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ κ°μ²΄κ° μλ€κ³ κ°μ ν΄λ΄ μλ€.
const person = {
name: 'John',
age: 30,
city: 'New York'
};
μ μμμμ person
μ 리ν°λ΄κ°μ²΄λ‘ μμ±λμμ΅λλ€. κ°μ²΄ 리ν°λ΄ νκΈ°λ²μ μ¬μ©νμ¬ name
, age
, city
μμ±μ μ μνκ³ , ν΄λΉ κ°μΌλ‘ κ°κ° 'John'
, 30
, 'New York'
μ ν λΉνμ΅λλ€.
리ν°λ΄κ°μ²΄λ κ°μ²΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ λ° μ¬μ©ν μ μμ΅λλ€. κ°μ²΄ 리ν°λ΄ νκΈ°λ²μ 볡μ‘ν κ°μ²΄λ μ€μ²©λ κ°μ²΄λ₯Ό λ§λ€ λλ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ μ€μ²©λ κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€.
const person = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
state: 'NY'
}
};
μ μμμμ person
κ°μ²΄λ address
μμ±μ κ°μ§κ³ μμΌλ©°, μ΄ μμ±μ λλ€λ₯Έ μ€μ²©λ κ°μ²΄λ₯Ό κ°μ§κ³ μμ΅λλ€. μ΄λ κ² κ°μ²΄λ₯Ό μ€μ²©νμ¬ κ΅¬μ±νλ©΄, 볡μ‘ν λ°μ΄ν°λ₯Ό λ³΄λ€ μ½κ² κ΄λ¦¬ν μ μμ΅λλ€.
리ν°λ΄κ°μ²΄λ μ½λλ₯Ό λ κ°κ²°νκ³ κ°λ μ± μ’κ² λ§λ€μ΄μ£Όλ μ₯μ μ΄ μμ΅λλ€. λν, κ°μ²΄λ₯Ό μμ±ν λ μΌλ°μ μΌλ‘ μ¬μ©λλ λ°©μμ΄κΈ° λλ¬Έμ μ΅μν΄μ§ νμκ° μμ΅λλ€.
κ°μ²΄ 리ν°λ΄ κ°μ
var name = 'μν₯λ―Ό';
var gender = 'λ¨μ';
var age = 31;
var play = function () {
console.log(this.name + 'μ΄ μΆκ΅¬λ₯Ό λλ¦Ό')
}
var person = {name, gender, age, play};
person.play()
// 보μ΄λ κ° -> μν₯λ―Όμ΄ μΆκ΅¬λ₯Ό λλ¦Ό