React 생명주기 원리 와 용법 구덩이 밟 기 노트
반응 생명주기
라 이 프 사이클 개관
생명주기 의 상태
구성 요소 의 생명 주 기 는 세 가지 상태 로 나 눌 수 있 습 니 다:
componentDidMount :
첫 번 째 렌 더 링 후 호출 은 클 라 이언 트 에 만 있 습 니 다.이후 구성 요 소 는 해당 하 는 DOM 구 조 를 생 성하 여 this.getDOMNode()를 통 해 접근 할 수 있 습 니 다.다른 자 바스 크 립 트 프레임 워 크 와 함께 사용 하고 싶다 면 이 방법 에서 setTimeout,setInterval 또는 AJAX 요청 등 을 호출 할 수 있 습 니 다.
componentWillReceiveProps
구성 요소 가 새로운 prop(업데이트 후)을 받 았 을 때 호출 됩 니 다.이 방법 은 render 를 초기 화 할 때 호출 되 지 않 습 니 다.
shouldComponentUpdate
불 값 을 되 돌려 줍 니 다.구성 요소 가 새로운 props 나 state 를 받 을 때 호출 됩 니 다.초기 화 할 때 나 forceUpdate 를 사용 할 때 호출 되 지 않 습 니 다.
구성 요 소 를 업데이트 할 필요 가 없다 는 것 을 확인 할 때 사용 할 수 있 습 니 다.
componentWillUpdate
구성 요소 가 새로운 props 나 state 를 받 았 지만 render 가 없 을 때 호출 됩 니 다.초기 화 할 때 호출 되 지 않 습 니 다.
componentDidUpdate
구성 요소 업데이트 완료 후 즉시 호출 합 니 다.초기 화 할 때 호출 되 지 않 습 니 다.
componentWillUnmount
구성 요소 가 DOM 에서 제거 되 기 전에 바로 호출 됩 니 다.
코드 표시
class Content extends React.Component {
componentWillMount() {
console.log('Component WILL MOUNT!')
}
componentDidMount() {
console.log('Component DID MOUNT!')
}
componentWillReceiveProps(newProps) {
console.log('Component WILL RECEIVE PROPS!')
}
shouldComponentUpdate(newProps, newState) {
return true;
}
componentWillUpdate(nextProps, nextState) {
console.log('Component WILL UPDATE!');
}
componentDidUpdate(prevProps, prevState) {
console.log('Component DID UPDATE!')
}
componentWillUnmount() {
console.log('Component WILL UNMOUNT!')
}
React 16.3 라 이 프 사이클설치 하 다.
구성 요소 의 인 스 턴 스 를 만 들 고 DOM 에 삽입 할 때 다음 순서 로 이 방법 을 호출 합 니 다.
constructor()
React 구성 요소 의 구조 함수 가 설치 되 기 전에 호출 됩 니 다.React.Component 하위 클래스 의 구조 함 수 를 실현 할 때 슈퍼(props)는 다른 문 구 를 사용 하기 전에 호출 해 야 합 니 다.그렇지 않 으 면 this.props 는 구조 함수 에서 정의 되 지 않 아 오류 가 발생 할 수 있 습 니 다.
일반적으로 React 에서 구조 함 수 는 두 가지 목적 에 만 사 용 됩 니 다.
할당 대상 을 통 해 로 컬 상 태 를 초기 화 합 니 다 this.state.
이벤트 처리 프로그램 방법 을 인 스 턴 스 에 연결 합 니 다.
setState()에 constructor()에 전화 해 서 는 안 됩 니 다.반면 구성 요소 가 로 컬 상 태 를 사용 해 야 한다 면 구조 함수 에서 초기 상 태 를 this.state 로 지정 하 십시오.
구조 함 수 는 his.state 가 직접 분배 하 는 유일한 위치 입 니 다.모든 다른 방법 에서 this.setState()를 사용 해 야 합 니 다.
static getDerivedStateFromProps()
getDerived StateFromProps 는 render 방법 을 호출 하기 전에 호출 합 니 다.초기 설치 든 후속 업데이트 든.업데이트 상태의 대상 을 되 돌려 주거 나,업데이트 되 지 않 은 상태 로 null 을 되 돌려 야 합 니 다.
render()
render()방법 은 클래스 구성 요소 에서 유일 하 게 필요 한 방법 입 니 다.
호출 할 때 this.props 를 검사 하고 this.state 는 다음 형식 중 하 나 를 되 돌려 야 합 니 다.
이 render()함 수 는 상태 가 없어 야 합 니 다.이것 은 구성 요소 상 태 를 수정 하지 않 고 호출 할 때마다 같은 결 과 를 되 돌려 주 며 브 라 우 저 와 직접 대화 하지 않 는 다 는 것 을 의미 합 니 다.
브 라 우 저 와 대화 할 필요 가 있다 면 componentDidMount()또는 다른 수명 주기 방법 을 실행 하 십시오.render()를 유지 하면 구성 요소 가 생각 하기 쉬 워 집 니 다.
shouldComponentUpdate()가 false 로 돌아 가면 render()가 호출 되 지 않 습 니 다.
componentDidMount()
UNSAFE_componentWillMount()
업데이트
props or state 의 변경 은 업 데 이 트 를 초래 할 수 있 습 니 다.구성 요 소 를 다시 렌 더 링 할 때 다음 순서 로 이 방법 을 호출 합 니 다.
static getDerivedStateFromProps()
render()
getSnapshotBeforeUpdate()
getSnapshotBeforeUpdate(prevProps, prevState)
getSnapshotBeforeUpdate()는 최근 에 보 여 준 출력 이 DOM 과 같은 호출 에 제출 되 었 습 니 다.구성 요소 가 변경 가능 하기 전에 DOM 에서 정 보 를 캡 처 할 수 있 습 니 다(예 를 들 어 스크롤 위치).이 생명주기 가 되 돌아 오 는 모든 값 은 componentDidUpdate()에 매개 변수 로 전 달 됩 니 다.
이 사례 는 흔 하지 않 지만 스크롤 위 치 를 특수 하 게 처리 해 야 하 는 채 팅 스 레 드 등 UI 에 나타 날 수 있 습 니 다.
홈 페이지 의 예
class ScrollingList extends React.Component {
constructor(props) {
super(props);
this.listRef = React.createRef();
}
getSnapshotBeforeUpdate(prevProps, prevState) {
// Are we adding new items to the list?
// Capture the scroll position so we can adjust scroll later.
if (prevProps.list.length < this.props.list.length) {
const list = this.listRef.current;
return list.scrollHeight - list.scrollTop;
}
return null;
}
componentDidUpdate(prevProps, prevState, snapshot) {
// If we have a snapshot value, we've just added new items.
// Adjust scroll so these new items don't push the old ones out of view.
// (snapshot here is the value returned from getSnapshotBeforeUpdate)
if (snapshot !== null) {
const list = this.listRef.current;
list.scrollTop = list.scrollHeight - snapshot;
}
}
render() {
return (
<div ref={this.listRef}>{/* ...contents... */}</div>
);
}
}
componentDidUpdate()componentDidUpdate()업데이트 가 발생 하면 바로 호출 합 니 다.초기 렌 더 링 은 이 방법 을 사용 하지 않 습 니 다.
이 를 구성 요 소 를 업데이트 할 때 DOM 을 조작 할 수 있 는 기회 로 합 니 다.현재 아 이 템 을 이전 아 이 템 과 비교 하면(예 를 들 어 아 이 템 이 변경 되 지 않 으 면 네트워크 요청 이 필요 하지 않 을 수 있 습 니 다)이것 도 네트워크 요청 을 하 는 좋 은 곳 입 니 다.
componentDidUpdate(prevProps) {
// Typical usage (don't forget to compare props):
if (this.props.userID !== prevProps.userID) {
this.fetchData(this.props.userID);
}
}
componentDidUpdate()단,하나의 조건 에서 위의 예 와 같이 감 싸 져 야 합 니 다.그렇지 않 으 면 무한 순환 을 초래 할 수 있 습 니 다.사용자 가 보이 지 않 지만 구성 요소 의 성능 에 영향 을 줄 수 있 습 니 다.componentDidUpdate():shouldComponentUpdate()가 false 로 돌아 가면 호출 되 지 않 습 니 다.
이 방법 들 은 남 겨 진 것 으로 여 겨 집 니 다.새 코드 에서 피해 야 합 니 다.
UNSAFE_componentWillUpdate()
UNSAFE_componentWillReceiveProps()
마 운 트 해제
DOM 에서 구성 요 소 를 삭제 할 때 이 방법 을 사용 합 니 다:
componentWillUnmount()
componentWillUnmount()는 구성 요 소 를 마 운 트 해제 하고 소각 하기 전에 즉시 호출 합 니 다.이 방법 에 서 는 타이머 가 잘못 되 었 거나 네트워크 요청 을 취소 하거나 만 든 구독 componentDidMount()를 삭제 하 는 등 필요 한 청 소 를 수행 합 니 다.
setState()를 호출 하지 마 십시오.componentWillUnmount()는 구성 요소 가 영원히 다시 나타 나 지 않 기 때 문 입 니 다.구성 요소 인 스 턴 스 를 마 운 트 해제 하면 다시 설치 하지 않 습 니 다.
오류 처리
렌 더 링 기간 에 라 이 프 사이클 방법 이나 모든 하위 구성 요소 의 구조 함수 에서 오류 가 발생 했 을 때 이 방법 을 호출 합 니 다.
static getDerivedStateFromError()
static getDerivedStateFromError(error)
후대 구성 요소 에서 오 류 를 던 진 후 이 생명 주 기 를 호출 합 니 다.매개 변수 로 던 진 오 류 를 받 아들 이 고 상 태 를 업데이트 하기 위해 값 을 되 돌려 야 합 니 다.
componentDidCatch()
componentDidCatch(error, info)
후대 구성 요소 에서 오 류 를 던 진 후 이 생명 주 기 를 호출 합 니 다.두 개의 인 자 를 받 습 니 다:
error-던 진 오류.
info-componentStack 은 키 를 포함 하 는 대상 으로 어떤 구성 요소 가 오 류 를 일 으 키 는 지 에 대한 정 보 를 포함 합 니 다.
오류 가 발생 하면 componentDidCatch()호출 을 통 해 UI setState 를 되 돌 릴 수 있 지만,향후 버 전에 서 는 추천 하지 않 습 니 다.렌 더 링 대신 static getDerived StateFromError()를 사용 하여 리 턴 을 처리 합 니 다.
componentDidCatch()는'제출'단계 에서 호출 되 기 때문에 부작용 을 허용 합 니 다.그것 은 오류 와 같은 일 을 기록 하 는 데 사용 해 야 한다.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, info) {
// Example "componentStack":
// in ComponentThatThrows (created by App)
// in ErrorBoundary (created by App)
// in div (created by App)
// in App
logComponentStackToMyService(info.componentStack);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
본 고 에서 말 한 것 이 여러분 의 react 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바삭바삭하고 간단한 결제 페이지 만들기먼저 Next.js에서 프로젝트를 만듭니다. Vercel & Next.js가 매우 편하기 때문에 최근에는이 구성을 사용하고 있습니다. 그런 다음 Tailwind CSS를 넣습니다. Tailwind CSS를 사용하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.