useEffect 콜백 함수에 비동기 함수를 넣으면 안되는 이유가 뭘까 ? #12
Unanswered
yunseorim1116
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
답: useEffect의 콜백 함수에 비동기 함수를 직접 넣으면 안 되는 이유는 useEffect가 동기적 처리를 기대하기 때문입니다.
useEffect
의 콜백 함수는 동기적으로 실행됩니다. 그러나 비동기 함수는 콜백 함수의 실행이 완료된 후에 실행되므로,useEffect
가 실행된 후 상태가 변경되거나 여러 비동기 작업이 동시에 진행될 수 있습니다. 이로 인해 상태 업데이트가 중첩되거나 예상하지 못한 순서로 진행될 수 있습니다.useEffect
는 clean-up 함수를 반환할 수 있습니다. 이 clean-up함수 는 컴포넌트가 언마운트되거나useEffect
가 다시 실행될 때 호출됩니다. 비동기 작업이 완료되기 전에 컴포넌트가 언마운트되면, 이 비동기 작업이 완료된 후 상태를 업데이트하려고 할 때, 이미 언마운트된 컴포넌트에서 상태를 변경하려는 문제가 발생할 수 있습니다. 이로 인해 오류가 발생하거나 예기치 않은 동작이 일어날 수 있습니다.이러한 문제를 해결하기 위해 비동기 함수를
useEffect
내에서 직접 호출하기보다는, 비동기 함수를 내부에서 정의하여 호출하고, 비동기 작업의 상태를 추적하며 필요할 때 정리 함수를 사용하는 것이 좋습니다.예를 들어:
이 예제에서는
isMounted
플래그를 사용하여 컴포넌트가 여전히 마운트된 상태인지 확인하고, 비동기 작업이 완료된 후 상태를 업데이트할 때 컴포넌트가 언마운트된 경우를 방지합니다.사담:
안되는건 알았는데...........
"왜" 가 궁금했다.
결론 = useEffect 의 콜백 함수는 동기적으로 동작하기 떄문! 탕탕~
Beta Was this translation helpful? Give feedback.
All reactions