클래스형 컴포넌트의 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때는 this.props를 사용합니다.
데이터를 전달하고 화면 내용을 변경할 때에도 this.props를 사용합니다.
부모에서 자식의 state변경하기
<!DOCTYPE html>
<html lang="en">
<head>
<title>스터디 자료</title>
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
time: new Date(),
};
}
componentDidMount() {
this.timerId = setInterval(() => {
this.setState({
time: new Date(),
});
}, 1000);
}
componentWillUnmount() {
clearInterval(this.timerId);
}
render() {
return (
<ul>
<Item value={this.state.time.toLocaleString()} />
<Item value={this.state.time.toLocaleString()} />
<Item value={this.state.time.toLocaleString()} />
</ul>
);
}
}
class Item extends React.Component {
constructor(props) {
super(props);
this.state = {
value: props.value,
};
}
componentDidUpdate(prevProps) {
if (prevProps.value !== this.props.value) {
this.setState({
value: this.props.value,
});
}
}
render() {
return <li>{this.state.value}</li>;
}
}
const container = document.getElementById('root');
ReactDOM.render(<App />, container);
</script>
</body>
</html>
자식에서 부모의 state변경하기
<!DOCTYPE html>
<html lang="en">
<head>
<title>스터디 자료</title>
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: '',
};
this.changeParent = this.changeParent.bind(this);
}
render() {
return (
<div>
<CustomInput onChange={this.changeParent} />
<h1>{this.state.value}</h1>
</div>
);
}
changeParent = function (event) {
this.setState({
value: event.target.value,
});
};
}
class CustomInput extends React.Component {
render() {
return (
<div>
<input onChange={this.props.onChange} />
</div>
);
}
}
const container = document.getElementById('root');
ReactDOM.render(<App />, container);
</script>
</body>
</html>
컴포넌트 내부 메소드는 꼭 바인드를 해주어야한다.
bind로 this값을 주지 않으려면 화살표함수를 사용해도 된다.
화살표함수로 작성할 시 this값이 존재하지 않기 때문에 상위 스코프에서 this값을 찾아 바인딩 된다.
함수형 컴포넌트의 상태값은 useState훅으로 관리되기 때문에 컴포넌트의 this로부터 자유롭습니다.
또한 함수형 컴포넌트 안에서 선언한 함수들 모두 전역 객체를 this로 가지기 때문에 이벤트 핸들러에 콜백 함수를 넘기는 상황에도 신경 쓸 필요가 없습니다.
'1차 공부 > 공부한 자료' 카테고리의 다른 글
외부폰트 가져온 후 특정 스타일드 컴포넌트에 적용하기 (0) | 2022.12.14 |
---|---|
221214 스터디자료 env (0) | 2022.12.14 |
221213 UUID 공부자료 (0) | 2022.12.13 |
221205 리액트의 기본 (p. 428~433) (0) | 2022.12.04 |
221126 7-1 스터디 정리자료 (0) | 2022.11.25 |