- Published on
React 공부하기 6 - 컴포넌트 반복
- Author
- Name
- yceffort
컴포넌트 반복해서 쓰기
import React, { Component } from 'react'
class IterationSample extends Component {
render() {
const names = ['눈사람', '얼음', '눈', '바람']
const nameList = names.map((name) => <li>{name}</li>)
return <ul>{nameList}</ul>
}
}
export default IterationSample
class App extends Component {
render() {
return <IterationSample />
}
}
특별한 거는 없지만, 콘솔에서 key
가 없다는 에러가 발생한다. 가상 DOM을 비교하는 과정에서, Key값을 활용하여 변화가 일어나는지 확인하기 때문에, key값을 지정해줘야한다.
class IterationSample extends Component {
render() {
const names = ['눈사람', '얼음', '눈', '바람']
const nameList = names.map((name, index) => <li key={index}>{name}</li>)
return <ul>{nameList}</ul>
}
}
이제 에러가 나지 않는다.
보통은 이렇게 정적인 데이터를 쓰기보다는, 동적인 데이터를 더 렌더링할 기회가 더 많을 것이다.
import React, { Component } from 'react'
class IterationSample extends Component {
state = {
names: ['토니안', '강타', '문희준', '이재원', '장우혁'],
name: '',
}
handleChange = (e) => {
this.setState({
name: e.target.value,
})
}
handleInsert = (e) => {
this.setState({
names: this.state.names.concat(this.state.name),
name: '',
})
}
handleRemove = (index) => {
// this.state의 레퍼런스
const { names } = this.state
this.setState({
names: names.filter((item, idx) => {
return idx !== index
}),
})
}
render() {
const nameList = this.state.names.map((name, index) => (
<li onDoubleClick={() => this.handleRemove(index)} key={index}>
{name}
</li>
))
return (
<div>
<input onChange={this.handleChange} value={this.state.name} />
<button onClick={this.handleInsert}>추가</button>
<ul>{nameList}</ul>
</div>
)
}
}
export default IterationSample