해당 포스트는 코드아카데미의 React 101 강의의 필기입니다.
💡 목적 : 부모로부터 받은 setState 메소드를 이용하여 부모 컴포넌트의 State를 자식 컴포넌트가 변경시키도록 만들기
handleClick()
메소드 안에 setState
를 호출하여 state를 변경시키고 있음class ParentClass extends React.Component {
constructor(props) {
super(props);
this.state = { totalClicks: 0 };
}
handleClick() {
const total = this.state.totalClicks;
this.setState(
{ totalClicks: total + 1 }
);
}
}
bind
를 해주어야 한다class ParentClass extends React.Component {
constructor(props) {
super(props);
this.state = { totalClicks: 0 };
this.handleClick = this.handleClick.bind(this);
}
props
로써 넘겨준다 render() {
return (
<ChildClass onClick={this.handleClick} />
);
}
export class ChildClass extends React.Component {
render() {
return (
<button onClick={this.props.onClick}>
Click Me!
</button>
);
}
}
💡 목적 : 부모 컴포넌트로부터 받은 setState 메소드를 이용해 자식 컴포넌트가 부모 컴포넌트의 state를 변경한 후, 부모 컴포넌트가 이를 다른 자식 컴포넌트(형제)에게 주는 것.
this.changeName
메소드를, setState에 의해 변화된 값이 들어갈 Sibling Component에는 this.state.name
을 준다. render() {
return (
<div>
<Child onChange={this.changeName} />
<Sibling name={this.state.name} />
</div>
);
}
this.props.onChange
함수를 실행하는 handleChange
메소드를 만들어 이벤트 리스너에 달아준다.export class Child extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
const name = e.target.value;
this.props.onChange(name);
}
render() {
return (
<div>
<select
id="great-names"
onChange={this.handleChange}>
<option value="Frarthur">Frarthur</option>
<option value="Gromulus">Gromulus</option>
<option value="Thinkpiece">Thinkpiece</option>
</select>
</div>
);
}
}
export class Sibling extends React.Component {
render() {
const name = this.props.name;
return (
<div>
<h1>Hey, my name is {name}!</h1>
<h2>Don't you think {name} is the prettiest name ever?</h2>
<h2>Sure am glad that my parents picked {name}!</h2>
</div>
);
}
}