-
Child Components Update Their Parents' stateStudy/React 2020. 6. 1. 21:35
지난 레슨에서,
여러분은 stateful한 부모 컴포넌트에서 stateless한 자녀 컴포넌트로 정보를 전달했다.
이번 레슨에서는,
당신은 패턴을 좀더 확장할 것이다.
stateless한 자녀 컴포넌트는 부모 컴포넌트의 state를 업데이트할 수 있다.
이것이 어떻게 동작하는가
1. 부모 컴포넌트 class는 this.setState()를 호출하는 메소드를 정의한다.
예를들어, Step1.js의 .handleClick()메소드를 보아라.
//Step1.js import React from 'react'; import ReactDOM from 'react-dom'; import { ChildClass } from './ChildClass'; class ParentClass extends React.Component { constructor(props) { super(props); this.state = { totalClicks: 0 }; } handleClick() { const total = this.state.totalClicks; // calling handleClick will // result in a state change: this.setState( { totalClicks: total + 1 } ); } }
2. 부모 컴포넌트는 새로 정의된 방법을 constructor에 있는 컴포넌트의 현재 인스턴스에 바인딩한다.
이렇게 하면 자녀 컴포넌트에 메소드를 전달할 때, 부모 컴포넌트 요소가 업데이트 될것이다.
step2.js의 counstructor()메소드의 끝부분을 보아라.
//Step2.js import React from 'react'; import ReactDOM from 'react-dom'; import { ChildClass } from './ChildClass'; class ParentClass extends React.Component { constructor(props) { super(props); this.state = { totalClicks: 0 }; this.handleClick = this.handleClick.bind(this); // 바인드 예시. } handleClick() { const total = this.state.totalClicks; // calling handleClick will // result in a state change: this.setState( { totalClicks: total + 1 } ); } // The stateful component class passes down // handleClick to a stateless component class: render() { return ( <ChildClass onClick={this.handleClick} /> ); } }
3. 일단 부모가 업데이트한 메소드와 바인드를 정의하면, 부모는 그 메소드를 자식에게 전달한다.
Step2.js의 28번째 줄 prop을 보아라.
4. 자녀는 아래로 전달되는 함수를 받는다. 그리고 이것을 이벤트핸들러로써 사용한다.
Step3.js를 참조해라.
유저가 버튼을 클릭했을때, 버튼 이벤트는 fire할 것이다.
이것은 부모의 state를 업데이트할 passed-down 함수를 호출할것이다.
import React from 'react'; import ReactDOM from 'react-dom'; export class ChildClass extends React.Component { render() { return ( // The stateless component class uses // the passed-down handleClick function, // accessed here as this.props.onClick, // as an event handler: <button onClick={this.props.onClick}> Click Me! </button> ); } }
출처: 코드카데미 를 번역하였습니다.
'Study > React' 카테고리의 다른 글
fragment (0) 2020.06.04 yarn start에서 사용자권한 오류 발생시 (0) 2020.06.04 Don't Update props (0) 2020.06.01 component State (부제. state와 props의 차이점) (0) 2020.06.01 컴포넌트 간 state 주고받기 (0) 2020.06.01