티스토리 뷰
componentDidMount() { // 컴포넌트가 첫 렌더링 후, 여기에 비동기 요청을 많이 함
}
componentDidUpdate() { // 리렌더링 후
}
componentWillUnmount() { // 컴포넌트가 제거되기 직전, 비동기 요청 정리를 많이 함
}
componentDidMount
렌더가 처음 성공적으로 실행되었다면 실행됨
> 리렌더링이 일어날 때는 실행되지 않음
componentWillUnmount
컴포넌트가 제거되기 직전 실행됨
componentDidMount에서 했던 작업을 제거하는 용도
부모 컴포넌트가 자식 컴포넌트(본인)를 없앴을 때
setInterval같은 함수를 없애주지 않으면 계속 돌아가기 때문에 없앨 때
*보통 둘이 짝임
componentDidUpdate
리렌더링 되었을 때 실행
이것들을 리액트 라이프 사이클이라고 함
클래스의 경우
constructor -> render -> ref -> componentDidMount
-> setState, props 바뀔 때 -> shouldComponentUpdate(true) -> render -> componentDidUpdate
부모가 나를 없앴을 때 -> componentWillUnmount -> 소멸
고차 함수
onClick={ }이라는 메소드 안에서 함수를 호출하는 부분이 들어 있으면 () => 를 옮겨줘서 간단히 쓸 수 있음
// 리액트에서 자주 쓰는 패턴
// 메소드안에 함수를 호출하는 부분이 들어있는 걸 간단하게 하는법
......
onClickBtn = (choice) => () => { // 2여기에 넣기 () =>
const { imgCoord } = this.state;
clearInterval(this.interval);
const myScore = scores[choice];
const comScore = scores[computerChoice(imgCoord)];
const diff = myScore - comScore;
if (diff === 0) {
this.setState({
result: '비겼습니다.',
});
} else if ([-1, 2].includes(diff)) {
this.setState((prevState) => {
return ({
result: '이겼습니다.',
score: prevState.score + 1,
});
});
} else {
this.setState((prevState) => {
return ({
result: '졌습니다.',
score: prevState.score - 1,
});
});
}
setTimeout(() => {
this.interval = setInterval(this.changeHand, 100);
}, 2000);
}
render() {
const { result, score, imgCoord } = this.state;
return (
<>
<div id="computer" style={{ background: `url(https://en.pimg.jp/023/182/267/1/23182267.jpg) ${imgCoord} 0` }}></div>
<div>
<button id="rock" className="btn" onClick={this.onClickBtn('바위')}>바위</button> // 1여기있는걸
<button id="scissor" className="btn" onClick={this.onClickBtn('가위')}>가위</button> // 1여기있는걸
<button id="paper" className="btn" onClick={this.onClickBtn('보')}>보</button> // 1여기있는걸
</div>
<div>{result}</div>
<div>현재 {score}점</div>
</>
);
......
useEffect
hooks에는 라이프사이클이 없어서 대신 useEffect를 쓴다
useState나 useEffect처럼 함수 컴포넌트 안에 적어줘야함
// *** 화살표 함수임!
useEffect(() => { // componentDidMount, componentDidUpdate 역할(1대1 대응은 아님)
return() => { // componentWillUnmount 역할
}
}, []); // 배열이 클로저문제를 해결하는 역할
[배열]의 값이 바뀌면 계속 실행됨. 여러개를 넣을 수도 있음
2번째 인자를 넣지 않으면
> state나 props가 바뀔 때마다 실행
[값]안의 값이 바뀔 때 계속 실행,종료를 반복함
그래서 setInterval을 넣으면 setTimeout과 비슷하게 작동함..
> []안에 넣어둔 값이 바뀔 때만 실행
[] 빈 배열을 넣으면 뭐가 바뀌던 더 이상 다시 실행하지 않겠다는 의미
> componentDidMount랑 같음, 처음 렌더될 때만 실행
uesEffect는 화면이 바뀌고 나서 실행되고
useLayoutEffect는 화면이 바뀌기 전에 실행됨 (화면을 리사이징 할때) 화면이 바뀌는 것을 감지함
'유튜브 강의' 카테고리의 다른 글
제로초 리액트 강의 6 로또 추첨기 만들기, useEffect, useMemo, useCallback (0) | 2021.11.17 |
---|---|
제로초 리액트 강의 5.2 가위바위보 만들기 (0) | 2021.11.16 |
제로초 리액트 강의 4 React 반복문, 반응속도 체크 만들기 (0) | 2021.11.15 |
제로초 리액트 강의 3.5 (0) | 2021.11.09 |
제로초 리액트 강의 3.4 리렌더링 방지, createRef (0) | 2021.11.09 |
- Total
- Today
- Yesterday
- 저스트코드
- 깃
- 자바스크립트
- CSS
- vue
- 드림코딩
- React
- map
- vscode
- 코딩앙마
- 회고
- 타입스크립트
- javascript
- 스파르타코딩클럽
- git
- scss
- Typescript
- html
- Til
- js
- 김버그
- 제로초
- 구름에듀
- 코드잇
- 비주얼스튜디오코드
- TS
- 제이쿼리
- Python
- 리액트
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |