• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 Lifecycle과 useEffect 숙제

Lifecycle과 useEffect 숙제

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #97216

    최문길
    참가자
    function List(props) {
        let [alert,setAlert] = useState(true);
        useEffect(()=>{
            setTimeout(()=>{
                setAlert(false)
            },2000)
       
        })
        console.log('render')
        let product = props.data;
        const navigate = props.navigate;
        return (
            <div className="container p-4">
                <div className="row">
                    {
                        alert == true ?  <div className="alert alert-warning">
                        09-HomeWork-2초이내 구매시 할인
                        divbox숨기기
                    </div> : console.log('check')
                    }
                .
                .
                .
    
    console.log('check')가 2번 찍히는데
    
    제 머릿속에서는 
    콘솔창에
    'render' <- 앱실행되니까 당연히 render가 나와야함
    'render' <- useState변경되므로 리렌더링 trigger 되서 리렌더링 되니까 당연히 나와야함
    'check'  <- 삼항연산자로 console창에 당연히 떠야하므로 이해됨
    이 이후에 
    useEffect가 실행되서 2초후 setAlert가 false로 들어와도 재렌더시 false 였으므로 
    setAlert의 값이 동일하므로 리렌더링이 안됨, 그렇게 배웠고
    이라고 생각했는데..
    'render' <- 왜 실행되는지 모르겠음
    'check'  <- 왜 실행되는지 모르겠음
    
    정리하자면
    제 생각으로 콘솔창에는
    'render'
    'render'
    'check' 까지여야 하는데,
    
    실제 찍힌 것은
    'render'
    'render'
    'check' 
    'render'
    'check'이 찍혀버림
    
    질문이유는 전반적인 작동원리를 알아야 내가 원하는대로 컨트롤 할 수 있기 때문입니다.
    
    센세 도와주세요 어제부터 오늘까지 밤새서 알아보려하는데 머리가 부족한가 봅니다.
    
    
    
    
    #97227

    codingapple
    키 마스터
    index.js 파일에 StrictMode 켜있으면 2번씩 렌더링될 수도 있습니다
    #97239

    최문길
    참가자
    그거 껐습니다. ㅜㅜ 
    
    
    #97242

    codingapple
    키 마스터
    html먼저 렌더링되고 
    그 다음에 useEffect 동작해서 state변경되고 
    그럼 다시 html이 렌더링됩니다
    #97569

    최문길
    참가자
    아 문길아 이거 봐야함 
    
    useEffect는 뭐다?? mount시 update시 된다.
    
    따라서 update없고 mount 없으니 컴퓨터가 콘솔에 위 처럼 찍어준거다....
    
    개념 다시 정리하자 문쨩
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠