반응형
App.js
import React from 'react';
import './App.css';
import Contact from './Contact';
function App() {
return (
<Contact />
);
}
export default App;
ContactInfo.js
import React, { Component } from 'react';
export default class ContactInfo extends React.Component {
render() {
return (
<div onClick={this.props.onClick}>{this.props.contact.name}</div> // onClick 을 Props로 받음
);
}
}
Contact.js
import React, { Component } from 'react';
import ContactInfo from './ContactInfo';
export default class Contact extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedKey: -1,
keyword: '',
contactData: [{
name: 'Abet',
phone: '010-000-001'
}, {
name: 'Betty',
phone: '010-000-002'
}, {
name: 'Charlie',
phone: '010-000-003'
}, {
name: 'David',
phone: '010-000-004'
}]
}
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleChange(e) {
this.setState({
keyword: e.target.value
})
}
handleClick(key) {
this.setState({
selectedKey: key
});
console.log(key, 'is selected');
}
render() {
const mapToComponents = (data) => { // 배열형 data 받아들임
data.sort(); // 오름차순정렬
data = data.filter((_contact) => {
return _contact.name.toLowerCase().indexOf(this.state.keyword.toLowerCase()) > -1; // contact 배열에서 keyword를 포함하는(indexOf) 요소를 찾아서(-1 보다 큰..) 반환 (모두 소문자로 변환하여 비교)
})
return data.map((_contact, i) => { // 배열의 1개 원소 _contact 와 인덱스 i를 넘겨줌
return (<ContactInfo
contact={_contact}
key={i}
onClick={() => this.handleClick(i)} // 화살표 함수로 함수를 호출해야 작동함
/>);
});
};
return (
<div>
<h1>Contacts</h1>
<input
name="keyword"
placeholder="Search"
value={this.state.keyword}
onChange={this.handleChange}
/>
<div>{mapToComponents(this.state.contactData)}</div>
</div>
);
}
}
반응형
'Programming > React' 카테고리의 다른 글
React강좌2, 전화번호부 - 3.Create 기능 (0) | 2020.08.03 |
---|---|
React강좌2, 전화번호부 - 2.Detail 보기 기능 (0) | 2020.08.01 |
React기초- 9.Delete (0) | 2020.07.29 |
React기초- 8.Update (0) | 2020.07.29 |
React기초- 7.Create (0) | 2020.07.29 |