라이프 사이클 한눈에 보기 >> http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
constructor(props) {
super(props);
this.resizeMap = this.resizeMap.bind(this);
}
static getDerivedStateFromProps(props, state) {
if (props.currentRow !== state.lastRow) {
return {
isScrollingDown: props.currentRow > state.lastRow,
lastRow: props.currentRow,
};
}
return null;
}
render() {
return (
<div className='Loading'>
<ClipLoader
sizeUnit={"px"}
size={100}
color={'#203CC6'}
/>
</div>
)
}
componentDidMount() {
// 외부 라이브러리 연동: slick, masonry 등
// 외부 api호출, DOM 에 관련된 작업 등
}
1) props변경
2) state변경
3) 부모 컴포넌트 리렌더링
4) this.forceUpdate() 강제 렌더링 트리거
shouldComponentUpdate(nextProps, nextState) {
// return false 하면 업데이트를 안함
return true;
// 기본적으로는 true를 반환
}
getSnapshotBeforeUpdate(prevProps, prevState) {
// DOM 업데이트가 일어나기 직전의 시점입니다.
// 새 데이터가 상단에 추가되어도 스크롤바를 유지해보겠습니다.
// scrollHeight 는 전 후를 비교해서 스크롤 위치를 설정하기 위함이고,
// scrollTop 은, 이 기능이 크롬에 이미 구현이 되어있는데,
// 이미 구현이 되어있다면 처리하지 않도록 하기 위함입니다.
if (prevState.array !== this.state.array) {
const {
scrollTop, scrollHeight
} = this.list;
// 여기서 반환 하는 값은 componentDidMount 에서 snapshot 값으로 받아올 수 있습니다.
return {
scrollTop, scrollHeight
};
}
}
componentDidUpdate(prevProps, prevState, snapshot) {
// componentDidMount처럼 side effect들을 처리
}
componentWillUnmount() {
// 이벤트 및 연동된 외부 라이브러리 제거
}
수정
2019.05.14
2019.09.05