해당 포스트는 코드아카데미의 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>
);
}
}