컴포넌트 통신
1. 컴포넌트 간 통신이 필요한 이유
2. props ⇌ callback


2.1 부모 ➡︎ 자식 (메서드 전달)
2.2 부모 ⬅︎ 자식 (메서드 실행)
3. 복잡한 컴포넌트 트리 구조
참고
Last updated


Last updated
import React, { Component } from 'react'
import PropsTypes from 'prop-types'
import Lecture from './Lecture'
class Lecturer extends Component {
static propTypes = {
instructor: PropsTypes.array,
}
static defaultProps = {
instructor: [],
}
parentComponentMethod = () => {
console.log('부모 컴포넌트에 콜백 됨')
}
render() {
return (
<ul className="lecturers">
{this.props.instructor.map((lecturer) => (
<Lecture
key={lecturer.id}
lecturer={lecturer}
// onParentCallback이란 이름으로 Lecture(자식) 컴포넌트에 속성을 보냄
onParentCallback={this.parentComponentMethod}
>
<figure className="lecturer-info">
<img src={lecturer.image} alt="" className="lecturer-photo" />
<figcaption>
{lecturer.module} 모듈을 담당 할 {lecturer.name} 강사 Facebook
바로가기
</figcaption>
</figure>
</Lecture>
))}
</ul>
)
}
}
export default Lecturer
import React from 'react'
// onParentCallback 속성을 받아 옴
const Lecture = ({ lecturer, children, onParentCallback }) => (
<li className="lecturers">
<a href={lecturer.facebook} rel="noreferer nopener">
{children}
</a>
<button
type="button"
className="button-remove-lecturer"
// 받아온 onParentCallback을 버튼에 이벤트 바인딩
onClick={onParentCallback}
>
제거
</button>
</li>
)
export default Lecture
class Lecturer extends React.Component {
parentComponentMethood = () => {
console.log('부모 컴포넌트에 콜백 됨')
}
render() {
return (
<ul className="lecturers">
{this.props.instructor.map((lecturer) => (
<Lecture
key={lecturer.id}
lecturer={lecturer}
onParentCallback={this.parentComponentMethood}
>
<figure className="lecturer-info">
<img src={lecturer.image} alt="" className="lecturer-photo" />
<figcaption>
{lecturer.module} 모듈을 담당 할 {lecturer.name} 강사 Facebook
바로가기
</figcaption>
</figure>
</Lecture>
))}
</ul>
)
}
}const Lecture = ({ lecturer, children, onParentCallback }) => (
<li className="lecturers">
<a href={lecturer.facebook} rel="noreferer nopener">
{children}
</a>
<button
type="button"
className="button-remove-lecturer"
// 받아온 onParentCallback을 버튼에 이벤트 바인딩
onClick={onParentCallback}
>
제거
</button>
</li>
)handleRemoveLecturer={this.props.handleRemoveLecturer}onClick={() => handleRemoveLecturer(lecturer.id)}this.setState({
FEML_lecturers: filteredLecturers,
})