본문 바로가기
웹 프론트엔드/React 리액트 (기초)

[React] 컴포넌트의 데이터 관리 ③ - 콜백 함수

by 지구인한군 2020. 9. 21.

2020/08/18 - [Web프런트엔드/리액트] - [React] 리액트 개발환경 구축

2020/09/09 - [Web프런트엔드/리액트] - [React] 리액트 테스트 앱 생성 및 수정

2020/09/11 - [Web프런트엔드/리액트] - [React] 리액트에서 사용하는 JSX

2020/09/11 - [Web프론트엔드/리액트] - [React] 리액트의 컴포넌트를 알아보자

2020/09/15 - [Web프론트엔드/리액트] - [React] 컴포넌트의 데이터 관리 ① - props 프로퍼티

2020/09/19 - [Web프론트엔드/리액트] - [React] 컴포넌트의 데이터 관리 ② - state 스테이트


 지난 시간에 state 기능으로 내부 데이터를 관리해봤습니다. 하지만 부모(App) 컴포넌트는 딱히 하는 게 없고, 자식 컴포넌트인 StateComponent에서 모든 기능을 담당했습니다. 오늘은 부모가 데이터 관리를 하고 자식에게 그 데이터를 조작하는 기능을 넘기는, 즉 수형 프로퍼티를 전달해 자식이 함수를 다시불러오는 것을 배워보겠습니다.

 

// ..\test_project\src\App.js
import React, { Component } from "react";
import CallbackComponent from "./components/CallbackComponent";
class App extends Component {
// 클래스 생성자 (ES6 관련 포스팅에서 설명)
constructor(props) {
// 생성자 정의를 하면 꼭 props를 전달
super(props);
// 스테이트값은 꼭 초기화!!!
this.state = {
count: 1,
isTen: false,
};
// countUp함수에서 this.state 객체인식을 위해 바인딩
this.countUp = this.countUp.bind(this);
}
countUp() {
// 숫자 증가
const countTemp = this.state.count + 1;
let isTenTemp = this.state.isTen;
// 10이상이면 true
if (countTemp >= 10) isTenTemp = true;
// 스테이트값 변경은 꼭 리액트의 setState 메서드 사용
this.setState({
count: countTemp,
isTen: isTenTemp,
});
// 로그를 보면 값이 바로 변경되지 않고 한타임 느리게 바뀜
console.log("countUp함수에서 값 : ", this.state.count);
}
render() {
return (
<div>
{/* 자식 컴포넌트에 프로퍼티값으로 부모의 스테이트값 대입 */}
<CallbackComponent
count={this.state.count}
isTen={this.state.isTen}
countUp={this.countUp}
/>
</div>
);
}
}
export default App;

 

 전 스테이트 관련 포스팅과 비교해보면 자식 컴포넌트에 있던 기능들이 대부분 부모(App) 컴포넌트로 넘어왔습니다. 코드는 거의 변경이 없지만, 중요한 부분은 render함수에서 CallbackComponent를 표시할 때 자식 프로퍼티 값으로 부모의 스테이트 값을 대입하는 부분입니다. 특히 countUp 프로퍼티로 넘기는 부분이 콜백 함수라 할 수 있습니다.

 

// ..\test_project\src\components\CallbackComponent.jsx
import React, { Component } from "react";
import PropTypes from "prop-types";
class CallbackComponent extends Component {
render() {
return (
<div>
{/* 부모에게 받은 프로퍼티 값 표시 */}
<p>숫자값 : {this.props.count}</p>
<p>10이상 : {String(this.props.isTen)}</p>
{/* 이 부분이 콜백 함수 */}
<button onClick={this.props.countUp}>카운트</button>
</div>
);
}
}
// 프로퍼티 타입 설정
CallbackComponent.propTypes = {
count: PropTypes.number,
isTen: PropTypes.bool,
countUp: PropTypes.func,
};
export default CallbackComponent;

 

 자식 컴포넌트인 CallbackComponent는 이제 화면에 뿌려주는 기능만 남았습니다. 크게 바뀐 부분은 부모에게 받은 프로퍼티 값으로 표시를 하고, 버튼을 클릭하는 기능도 부모 컴포넌트에 구현된 함수를 쓰고 있습니다. 바로 이 부분이 콜백 함수라 할 수 있습니다. 정리를 하자면 스테이트 값으로 내부 데이터 관리를 하고, 외부와의 연결은 프로퍼티로 값을 넘기거나 아니면, 데이터 조작이 가능한 콜백 함수를 넘기면 되는 것입니다.

 

여기까지 세 번에 걸쳐 컴포넌트의 데이터 관리에 대해 알아봤습니다.

앞으로 더 심도 있는 기능들이 많이 남아있으니, 일단 간단한 데이터 관리는 여기까지 하겠습니다.

 

여기까지는 참 쉽죠?


2020/09/22 - [Web프론트엔드/리액트] - [React] 컴포넌트의 형태를 분류해보자

댓글