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는 이제 화면에 뿌려주는 기능만 남았습니다. 크게 바뀐 부분은 부모에게 받은 프로퍼티 값으로 표시를 하고, 버튼을 클릭하는 기능도 부모 컴포넌트에 구현된 함수를 쓰고 있습니다. 바로 이 부분이 콜백 함수라 할 수 있습니다. 정리를 하자면 스테이트 값으로 내부 데이터 관리를 하고, 외부와의 연결은 프로퍼티로 값을 넘기거나 아니면, 데이터 조작이 가능한 콜백 함수를 넘기면 되는 것입니다.
여기까지 세 번에 걸쳐 컴포넌트의 데이터 관리에 대해 알아봤습니다.
앞으로 더 심도 있는 기능들이 많이 남아있으니, 일단 간단한 데이터 관리는 여기까지 하겠습니다.
여기까지는 참 쉽죠?
'웹 프론트엔드 > React 리액트 (기초)' 카테고리의 다른 글
[React] 컴포넌트의 Lifecycle 생명주기 함수 - 이론 (0) | 2020.09.24 |
---|---|
[React] 컴포넌트의 형태를 분류해보자 (0) | 2020.09.22 |
[React] 컴포넌트의 데이터 관리 ② - state 스테이트 (0) | 2020.09.19 |
[React] 컴포넌트의 데이터 관리 ① - props 프로퍼티 (0) | 2020.09.15 |
[React] 리액트의 컴포넌트를 알아보자 (0) | 2020.09.11 |
댓글