2017-01-03 9 views
1

https://facebook.github.io/react/docs/react-component.html#setstateReact.Component setState를 원자 갱신

그것은 서명 기능 (상태 소품) => newState로 함수를 전달하는 것도 가능하다. 이 경우 값을 설정하기 전에 상태 및 소품의 이전 값을 참조하는 원자 업데이트 을 넣습니다. 예를 들어, 우리가 props.step에 의해 상태 의 값을 증가 싶어한다고 가정 여기 원자 업데이트로

this.setState((prevState, props) => { 
    return {myInteger: prevState.myInteger + props.step}; 
}); 

을 의미한다 무엇? JavaScript가 단일 스레드 언어가 아닌가? 즉, 모든 업데이트가 원자 적이어야합니다.

답변

2

단일 스레드 네,하지만 잠재적 인 비동기 성이 많이 있습니다.

let atom = 10 
atom = 20 
console.log(atom) // guaranteed to be 20, so "atomic" 

// race condition 
setTimeout(() => atom = 30, Math.random() * 1000) 
setTimeout(() => atom = 40, Math.random() * 1000) 

setTimeout(() => console.log(atom), 2000) // 30? or 40? random! 

setState는 비동기 호출, 그래서 그것을 실행됩니다 이후 state가 변경 가능성이 있습니다.

아마도 적용 할 수있는 다른 문구는 트랜잭션 업데이트를 대기열에 넣는 것입니다. 그러나 나는 그 어떤 멋진 말씨도 여기에서 혼란 스러울 수 있다고 생각합니다. 상태가 변경되었을 수도 있다는 것을 설명하는 것이 가장 좋으므로 콜백에는 이전 상태의 정확한 스냅 샷이 있습니다.