useEffect
React : 탭 내용 fade되도록 만들기 (+class에 변수 넣기)
풀이 useEffect를 사용하여 tab 값이 변경될 때마다 fade 값을 업데이트하고, 컴포넌트가 언마운트될 때 fade를 초기화하도록 넣었다. function TabContent({tab}){ let [fade, setFade] = useState('') useEffect(()=>{ setTimeout(()=>{ setFade('end') }, 100) return ()=>{ setFade('') } }, [tab]) return ( {/* */} { [내용0, 내용1, 내용2][tab] } ) } 알게 된 점 cleanup function을 사용해 end를 뗐다가 부착할 수 있도록 하였다. setTimeout을 이용하여 automatic batching 기능을 무효할 수 있도록 하였다. class에..
React 정리 (1) : useEffect, clean up (조건 별 실행순서), automatic batching
useEffect와 cleanup함수의 조건 별 실행순서 의존성 배열 값이 있을 때 useEffect(()=>{ //함수 A return ()=>{ //함수 B } }, [변수나state]) Mount(초기 마운트) 시나리오: 컴포넌트가 처음으로 마운트되면 함수 A가 실행 Update(업데이트) 시나리오: 컴포넌트가 업데이트되고 의존성 배열에 포함된 변수나 state가 변경되면, 먼저 함수 B가 실행 후 함수 A가 실행 Unmount(마운트 해제) 시나리오: 컴포넌트가 마운트 해제되면 함수 B가 실행 의존성 배열 값이 비었을 때 useEffect(()=>{ //함수 A return ()=>{ //함수 B } }, []) Mount(초기 마운트) 시나리오: 컴포넌트가 처음으로 마운트되면 함수 A가 실행 U..
React : 더보기 버튼을 누를 때마다 다른 get주소 데이터 불러오기 (+로딩중)
조건 더보기 버튼을 1번과 2번 누를 때 각각 다른 get 주소 상품 데이터를 불러오고, 3번 누르면 더이상 상품이 없다고 표시한다. 풀이 '3번 이상 더보기 버튼을 눌렀을 시 더이상 상품 없음 알림'과 '더보기 버튼 클릭 횟수'를 state로 작성했다. 버튼 클릭 시 클릭 횟수를 1 증가시키는 콜백함수(handleClick)를 작성해 버튼 이벤트핸들러 안에 넣었다. 더보기 버튼 클릭 시 실행될 콜백함수(moreProduct)를 작성했다. - ajax로 상품데이터를 불러오기 전 loading을 실행시켰다. (setLoading(true);) - 클릭 횟수에 따른 url을 변수로 만든 후, if문으로 처리하였다. (3번 이상 클릭 시 '상품 없음 알림' true, '로딩' false, ajax 실행을 중단..
React : useEffect, clean up (실행조건)
useEffect 실행조건 useEffect(()=>{ 실행할코드 }, [변수나state]); useEffect()의 둘째 파라미터로 []를 넣으면, 안의 변수나 state가 변할 때마다 useEffect 안의 코드를 실행한다. []안에는 state나 변수를 여러개 넣을 수 있다. [] 안에 아무것도 넣지 않으면 mount(로드)시에만 1회 실행한다. clean up function useEffect(()=>{ //함수 A return ()=>{ //함수 B } }, [변수나state]) 예시 useEffect(()=>{ let timer = setTimeout(()=>{ setAlert(false) },2000) return ()=>{ clearTimeout(timer) } // 기존 타이머 제거 },..
React : 2초 뒤에 사라지는 alert 만들기 (useEffect, 숏서킷평가)
2초 뒤에 사라지는 alert 만들기 풀이 - 바닐라 js 버전 import { useEffect } from "react" function Detail(props){ useEffect(()=>{ setTimeout(()=>{ document.querySelector('.alert-warning').style.display = 'none' },2000) }); return ( 2초 이내 이벤트로 이동하세요 ) } 풀이 2 - react 스타일 버전 import { useEffect, useState } from "react" function Detail(props){ let [alert, setAlert] = useState(true); useEffect(()=>{setTimeout(()=>{ setAl..
React : Lifecycle, useEffect (사용법)
Lifecycle mount (장착) 컴포넌트가 있는 페이지로 들어갔을 때 컴포넌트가 mount(장착)된다. update (업데이트) 컴포넌트 안에서 state가 조작되는 등 재랜더링되어 업데이트가 일어난다. unmount (제거) 다시 홈으로 돌아가면 Detail 컴포넌트가 unmount(제거)된다. Lifecycle hook (간섭) 그리고 위 Lifecycle들이 일어나는 시점에 코드를 실행할 수 있다. 사용법 - 옛날 class 문법 class Detail2 extends React.Component { componentDidMount(){ //Detail2 컴포넌트가 로드되고나서 실행할 코드 } componentDidUpdate(){ //Detail2 컴포넌트가 업데이트 되고나서 실행할 코드 }..