개발자

React 에서 자식 컴포넌트에게 넘겨준 boolean 값이 한박자 느리게 반응하는 문제 어떻게 해결하나요?

2023년 03월 19일조회 310

부모 컴포넌트에서 check를 받고 있는데 자식컴포넌트에서 check가 true면 실행하게되는 로직으로 짰는데 의존성배열에 check를 넣어도 한박자 느리게 반응을 하더라구요. 이것도 비동기 처리로 해결이 가능한가요?? 기본틀은 아래와 같습니다. 여기서 check는 버튼을 누르면 true로 바뀌는 구조입니다. 근데 2번을 눌러야 하는게 지금 문제구요.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

김석현님의 프로필 사진

안녕하세요! 질문자님께서 말씀하신대로라면, 부모 컴포넌트에 check라는 상태가 정의되어있고, alert이라는 상태는 자식 컴포넌트에 정의되어있을 것 같은데요. 혹시 아래와 같은 코드가 맞을까요? import { useState, useEffect } from "react"; const App = () => { const [check, setCheck] = useState(false); const handleClick = () => { setCheck(true); }; return ( <> <button onClick={handleClick}>check를 true로 만들기</button> <Child check={check} /> </> ); }; const Child = ({ check }) => { const [alert, setAlert] = useState(false); useEffect(() => { if (check) { setAlert(true); } else { setAlert(false); } }, [check]); return <div>{alert ? "true로 변경됐어요." : "원래는 false였습니다."}</div>; }; export default App; 혹시 이런 형식으로 구성하신 게 맞다면, "check를 true로 만들기" 라는 버튼을 "한 번" 클릭했을 때, 아래와 같이 동작할 것 같아요. 1) 부모 컴포넌트에서 선언한 check 상태가 업데이트되었으므로 부모 컴포넌트가 리렌더링 2) 부모 컴포넌트가 리렌더링되면서 업데이트된 check 값을 자식 컴포넌트에 전달 3) 자식 컴포넌트가 리렌더링되면서 useEffect hook을 실행(check가 의존성 배열에 있으므로) 4) check 값이 true이므로 setAlert(true) 실행 5) alert 상태가 업데이트되었으므로 자식 컴포넌트가 리렌더링 6) alert 값이 true이므로 화면에는 "true로 변경됐어요." 라는 문구가 나옴 이와 같이 정상적인 상황이라면 버튼을 "한 번" 클릭했을 때, 질문자님께서 기대하셨던 동작을 할거라는 생각이 듭니다만, 혹시 제가 놓친 부분이 있을 수 있으니 가능하시다면 전체 코드를 첨부해주시면 좋을 것 같아요. 답변드리는데에 조금 더 도움이 될 것 같습니다.

profile picture

익명

작성자

2023년 03월 22일

안녕하세요! 석현님이 적어주신 코드와 비슷합니다. 제가 '두 번'이라고 말했던건 단순 착각이었네요 (시점이 안맞아서 클릭을 두 번 했던 것 같아요). 답변 덕분에 state가 업데이트 될 때의 렌더링 동작을 잘 이해하게 되었습니다. 감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!