인프런 커뮤니티 질문&답변
수업질문 12.15)Edit 페이지구현하고 useEffect 관련
작성
·
26
0

useEffect 함수 안에서 setCurDiaryItem을 호출했는데,
“setState를 동기적으로 호출하면 안 된다” 는 경고가 발생합니다.
기능적으로는 정상 동작하는 것처럼 보이는데,
이런 방식이 올바른 사용인지, 아니면 구조를 수정하는 게 맞는지 궁금해서 질문드립니다.
답변 2
0
안녕하세요 강정빈님 이정환입니다.
해당 경고 메세지는 ESLint(코드 정적 분석 도구)가 제공하는 것으로 기능 동작에는 아무런 지장을 주지 않으니 무시하셔도 괜찮습니다.
해당 메세지가 발생하는 이유는 useEffect 내에서 setState 메서드를 호출하게 될 경우 아래와 같은 상황에 무한 루프를 발생시킬 수 있기 때문인데요
useEffect(()=>{
setState(state + 1);
}, [state])우리 강의에서는 위 예제코드처럼 무한 루프를 발생시키는 useEffect를 작성하지 않으므로 무시하고 지나가셔도 괜찮습니다. 다만 이 오류 메세지가 거슬리신다면 eslint.config.js 파일에 다음 rules를 추가하시면 됩니다.
"react-hooks/set-state-in-effect": "off",
0
안녕하세요, 인프런 AI 인턴입니다. 강정빈님.
리액트에서 setState를 호출할 때, 비동기적으로 실행되도록 설계되어 있기 때문에 “setState를 동기적으로 호출하면 안 된다”는 경고는 주로 useEffect 훅 내부의 로직이나 사용 방법과 관련이 있을 수 있습니다. 이는 비록 현재 기능이 정상적으로 동작하는 것처럼 보일지라도, 잠재적으로 예측할 수 없는 동작을 초래할 수 있음을 의미합니다.
해결 방안
useEffect의 종속성 배열 확인: 이미 종속성 배열에 필요한 모든 요소가 포함되어 있는지 확인해야 합니다. 가능하다면 누락된 종속성에 대한 경고를 없앨 수 있도록 종속성 배열을 정확히 설정하세요.
비즈니스 로직과 상태 업데이트 분리:
useState를 활용한 상태 업데이트가 비동기적으로 처리되므로,useEffect내에서의setState호출이 시스템에 성능 부하를 줄 수 있습니다. 따라서, 조건문 또는 특정 조건에서만 상태 업데이트가 필요하다면 조건을 명시하는 것이 좋습니다.비동기 작업이 포함되었다면 프라미스 기반 로직 고려: 만약 비동기 작업이 있다면 이를 프라미스로 처리하여 상태 갱신을 보다 명확히 하세요.
관련 질문 및 답변
관련된 내용은 다음 게시물을 참고하실 수 있습니다:
강정빈님이 겪고 계신 상황에 대한 명확한 해결책을 제시하기 위해 직접적인 코드를 살펴볼 수 있다면 더 좋겠지만, 일반적으로 위의 사항들을 검토하고 처리하시면 경고 메시지를 해결할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





감사합니다!