react 의 setState 실행 메커니즘
6774 단어 react.
react 에서 구성 요소 자체 의 상 태 는 state 를 통 해 유지 되 지만 state 는 직접 수정 할 수 없습니다.setState 방법 을 사용 하여 수 정 된 state 와 원래 의 state 를 비교 하여 새로운 state 를 구성 해 야 합 니 다.
쓰다
constructor(props) {
super(props);
this.state = {
value: 1
}
}
componentDidMount() {
this.setState({
value: 2 // value 2
})
}
이 때 같은 역할 영역 에서 이 value 를 사용 하고 싶 은 데 얻 을 수 없 나 요?
componentDidMount() {
this.setState({
value: 2
})
console.log(this.state.value)
}
결과 출력 은 1 입 니 다.저 는 분명히 그것 을 바 꾸 었 지만 찾 을 수 없습니다.먼저 setState 는 비동기 작업 이 라 고 생각 합 니 다.출력 문 구 는 동기 코드 로 먼저 실 행 했 습 니 다.(js 는 동기 코드 를 먼저 실행 한 다음 에 비동기 대기 열 을 찾 습 니 다)그러면 지금 어떻게 해결 해 야 합 니까?해결 방법(추가 필요):
async componentDidMount() {
await this.setState({
value: 2
})
console.log(this.state.value)
}
componentDidMount() {
this.setState({
value: 2
}, () => {console.log(this.state.value)})
}
componentDid Mount 에서 여러 개 를 사용 하면 어 떨 까요?
componentDidMount() {
this.setState({
value: this.state.value + 1
})
this.setState({
value: this.state.value + 1
})
}
결국 2 를 수출 하 다 니,너 는 비동기 라 도 이렇게 놀 수 는 없 잖 아.그럼 문 제 는 어디 에 있 니?먼저,setState 는 갈고리 함수 의 state 를 통합 합 니 다.각각 setState 를 state 상태 유지 보수 대기 열 에 추가 하고,최종 적 으로 하나의 state 를 구성 한 다음 에 렌 더 링 을 합 니 다.그러면 상기 두 개의 같은 setState 는 하나 로 합 쳐 집 니 다.그래서 setState 작업 을 했 을 뿐 인 데 왜 이런 합병 방식 을 취 했 습 니까?state 가 변 하면 구성 요소 의 재 렌 더 링 을 촉발 하기 때문에 합병 은 렌 더 링 횟수 를 줄 이 고 성능 을 향상 시 키 는 역할 을 합 니 다.
setState 는 정말 비동기 동작 입 니까?
우선 setState 자 체 는 비동기 코드 로 작 성 된 것 이 아 닙 니 다.이것 은 확인 할 수 있 습 니 다.그러나 setState 를 만나면 상태 대기 열 에 놓 여 합 쳐 지 기 를 기다 리 기 때문에 이 때 는 새로운 state 를 즉시 가 져 올 수 없 기 때문에'비동기'라 고 볼 수 있 지만 동기 화 될 수도 있 습 니 다.
componentDidMount() {
setTimeout(() => {
this.setState({
value: this.state.value + 1
})
this.setState({
value: this.state.value + 1
})
console.log(this.state.value)
})
}
이상 의 코드 가 3 을 출력 했 습 니 다.setTimeout 타이머 가 하나 더 추가 되 었 기 때 문 입 니까?setState 는 합성 이벤트 와 갈고리 함수 에서 만'비동기'이 며,네 이 티 브 이벤트 와 setTimeout 에서 모두 동기 화 됩 니 다.
더욱 깊이 들어가다
function enqueueUpdate(component) {
ensureInjected();
// ( )
if (!batchingStrategy.isBatchingUpdates) {
batchingStrategy.batchedUpdates(enqueueUpdate, component);
return;
}
// ( )
dirtyComponents.push(component);
}
요약:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx 에서 사이트 아이콘 표시 설정전단 개발 환경: react:^16.4.1 webpack:^4.16.0 웹 팩 에 favicon. ico 설정 추가: nginx 는 ico 에 대한 지원 을 추가 합 니 다:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.