React에서 Async 문제 해결하기

왜 React의 setState 내에서 함수를 사용하는 것이 비동기 문제를 해결할까요? React에서 하나의 공통적인 도전 과제는 비동기적인 상태 업데이트를 처리하는 것입니다. 여러 개의 setState() 호출이 이루어질 때, React는 성능상의 이유로 이들을 함께 묶어 처리할 수 있습니다. …

title_thumbnail(React에서 Async 문제 해결하기)

왜 React의 setState 내에서 함수를 사용하는 것이 비동기 문제를 해결할까요?

React에서 하나의 공통적인 도전 과제는 비동기적인 상태 업데이트를 처리하는 것입니다. 여러 개의 setState() 호출이 이루어질 때, React는 성능상의 이유로 이들을 함께 묶어 처리할 수 있습니다. 이로 인해 예기치 않은 부작용이 발생할 수 있습니다. 그러나 React는 이 문제에 대한 해결책으로 setState()의 인자로 객체 대신 함수를 사용하는 것을 권장하고 있습니다. 함수의 사용은 React가 상태를 업데이트한 후에 함수를 실행하기 전에 상태가 업데이트되었는지를 보장하므로, 비동기적인 업데이트로 인해 발생할 수 있는 잠재적인 문제를 피할 수 있습니다.

객체 기반의 setState()의 문제점

setState()의 인자로 객체를 전달할 때, React는 업데이트를 추적하기 위한 이벤트를 생성하고 마침내 상태를 업데이트합니다. 그러나 연속적으로 여러 setState() 호출이 빠르게 이루어질 경우, React는 이들을 함께 묶어 비동기적인 업데이트를 수행할 수 있습니다. 결과적으로, 첫 번째 setState() 호출에서 사용된 상태는 실제로 업데이트가 수행될 때 기존 정보가된 상태일 수 있습니다. 이로 인해 일관성이 없고 예상치 못한 동작이 발생할 수 있습니다.

this.setState({
  counter: this.state.counter + this.props.increment,
});

해결책: 함수 기반의 setState()

객체 기반의 setState()와 관련된 비동기적인 문제를 해결하기 위해, React는 이전 상태와 props를 인자로 받는 함수를 사용하는 것을 권장합니다. 콜백 함수에서 제공되는 prevState 인자를 사용함으로써, 가장 최신 상태를 사용하고 있는지를 보장할 수 있습니다.

this.setState((prevState, props) => ({
  counter: prevState.counter + props.increment
}));

prevState를 사용함으로써, React는 콜백 함수가 실행되기 전에 상태가 업데이트되었다는 것을 보장합니다. 이렇게 함으로써 여러 setState() 호출이 비동기적으로 묶여도 상태 값의 정확성과 일관성을 보장할 수 있습니다.

함수 기반 접근 방식을 사용하는 것은 객체 기반 접근 방식에 비해 간접성을 도입하는 것에 유의해야 합니다. 그러나 대부분의 경우 추가된 안전성과 신뢰성은 성능에 미치는 영향을 상쇄시키므로 추가 비용입니다.

일반적인 함정과 최적의 사례

setState()를 사용할 때 비동기적인 업데이트의 결과와 이를 올바르게 처리하는 방법의 의미를 이해하는 것이 중요합니다. 이런 일반적인 함정을 피하기 위해 다음을 집중적으로 회피하십시오:

1. 잘못된 상태 참조

비동기적 업데이트를 다룰 때, setState()를 호출한 후에 this.state를 참조하지 말아야 예상치 못한 결과를 피할 수 있습니다. setState()가 상태를 비동기적으로 업데이트하므로, 호출 후에 즉시 새로운 상태를 사용할 수 없을 수 있습니다. 대신에 제공된 prevState를 신뢰하여 업데이트된 값을 일관성 있게 액세스하십시오.

2. setState()의 과도한 호출 피하기

성능상의 이유로 setState() 호출이 함께 묶여 성능 문제를 일으킬 수 있으므로, 짧은 기간에 지나치게 많은 setState() 호출을 피하세요. 더 나은 성능을 위해 여러 상태 업데이트를 단일 호출로 통합할 수 있는지 평가하십시오.

3. React의 지침을 따르기

React의 함수 기반 setState() 사용 권장은 간극된 테스트와 최적화 노력에 기반합니다. 이러한 지침을 따르면 코드가 React의 최상의 사례에 맞게되고 비동기 업데이트로 인해 발생하는 잠재적인 문제를 피할 수 있습니다.

결론

React의 setState() 내에서 함수를 사용하여 상태 업데이트를 처리하는 것은 비동기 업데이트를 관리하고 예상치 못한 부작용을 방지할 수 있는 신뢰성 있는 해결책을 제공합니다. prevState 인자를 활용함으로써 가장 최신 상태와 일관성 있는 코드를 보장할 수 있습니다. React 애플리케이션에서 비동기 업데이트와 관련된 일반적인 함정을 피하기 위해 React의 지침과 최적의 사례를 준수하는 것을 기억하세요.

참고 자료 : 

reactjs

Leave a Comment