useMemo
를 사용해서 분리 후 사용 (렌더링 최소화) const prevMovieList = React.useMemo(()=>{
return prevMovies.map(() => <Movie movie={list}/> ),
[prevMovies]
})
useCallback
, useMemo
등을 사용하면서 deps
를 생각하면서 props
를 최적화
삼항연산자도 render에서 x => 가독성 떨어짐
props가 3, 4개 이상 들어가면 legacy가 되고 유지보수 어려워짐
recoil-persist
=> 코드 복잡해짐 쓰지 말자
컴포넌트 만 대문자로 시작!!
폴더 정리 잘하기
Modal
컴포넌트가 있으면 안에 BookmarkModal
폴더를 나눠 분리순수 컴포넌트가 아닌 로직이 들어간 컴포넌트는 간략하게 만들기
= state와 상관없는 함수는 밖으로 빼자 (getErrorMsg => utill에)
React-Helmet
리액트는 SPA 이다.
public/index.html
만을 읽는다.페이지별 메타태그를 다르게 정의할 수 있다.
title
이나 description
을 설정 가능react-virtualized
windowing
기법: 실제 보이지 않는 컴포넌트는 렌더링하지 않고 영역만 차지하게 한다.react-window
존재Pinterest
, Dribbble
@emotion
SSR을 풀지원 (server side rendering에 바로 적용됨)
css-in-js
형식으로 스타일을 사용localhost:3000
, dev 배포
등의 URL을 서버에서 등록해뒀는지 체킹해야 한다.Import from git: 자신의 깃허브 페이지와 연동
프로젝트 선택
yarn/npm build
deploy => warning도 안됨
push하면 자동으로 build 해줌
key가 없으면 => deploy setting에서 enviroment에 넣어준다. => retry deploy
새로고침했을때 404 => client-side routing(react) public/_redirects 만들어서 따라하기
주소 변경 => deploy setting => domain management => change site name
@import url(주소)
body,
button,
...{
font-famliy에 추가
}
index.html
에 body 안에 다음 내용 추가
<!--[if IE]>
<div id="ieGuide">
<h1>Please get out of here. </h1>
</div>
<![endif]-->
사용자 수, 위치, 방문한 페이지, 이벤트 등의 기록을 볼 수 있다.
예시
import { gaEvent } from 'hooks/useGa'
const handlerChange = () => [
gaEvent({ action: 'todo;, data: checked ? 'check' : 'uncheck' })
}
useEffect(() => {
gvPV(${pathname}${search}) // 페이지 뷰 올라가게
})