npm i antd@4 ant-design/icons@4
아이콘은 용량을 많이 차지하므로 보통 따로 설치를 해야한다
넥스트는 기본적으로 웹팩이 들어있다. 원래 css파일은 import를 못하는데 웹팩이 css를 보는 순간 스타일 태그로 바꿔줘서 html에다가 넣어준다. import를 할 수 있는 건 자바스크립트뿐이다. 웹팩은 이미지등 여러가지 파일을 확장자와 상관없이 (로더가 필요하지만) 합쳐준다.
css가 깨지면 css 파일을 import 해준다
import "antd/dist/antd.css";
반응형 제작할 떄 그리드 시스템을 사용한다
xs: 모바일, sm: 태블릿, md 데스크탑
gutter : 컬럼 사이의 간격을 의미한다
AppLayout.propTypes = {
children: propTypes.node.isRequired,
}
App.propTypes = {
Component: PropTypes.elementType.isRequired,
};
LoginForm.propTypes = {
setIsLoggedIn: PropTypes.func.isRequired,
};
_app.js는 pages들의 공통부분이다
import Head from "next/head";
<a href="url">주소</a>
인라인 스타일링을 할 때 단위를 넣고 싶으면 문자열로, 단위를 생략하고 싶으면 숫자만 쓴다 (숫자만 쓰는 경우가 더 많다)
e.g. <div style={{ marginTop: "10px" }}>
또는 <div style={{ marginTop: 10 }}>
cf) marginTop은 자바스크립트용, margin-top은 css용 표기방법
리렌더링이 될 때 함수가 통째로 재생성 되는데 그 안에 객체가 있으면 객체가 재생성된다 -> 왜냐면 {} === {} 는 항상 false이기 때문!
-> 객체의 재생성을 막는 방법중 하나로 styled-Component를 사용할 수 있다.
styled-components에서 컴포넌트를 스타일링 하는 방법
const SearchInput = styled(컴포넌트이름).
따라서 렌더링을 최적화하기위해서 스타일드 컴포넌트를 만들거나, useMemo를 사용한다
cf) useMemo와 useCallback의 차이 -> 값을 캐싱/ 함수를 캐싱
리렌더링이 될 때 함수컴포넌트 전체가 다시 실행되는 건 맞다.
다시 그리는 부분은 JSX에서 리렌더링 전과 달라지는 부분만 다시 그리는 것 -> 함수 컴포넌트 안에서 return 부분이 버추얼 돔
그러므로 인라인 스타일에 객체가 들어가 있으면 함수컴포넌트가 재실행 될 때 마다 그 객체가 있는 곳부터 내부 태그까지 모두 화면에 다시 그린다->성능악화
리렌더링은 JSX부분을 다시 그리는 건데 리렌더링이 수십번 일어나도 달라지는 부분이 없으면 화면을 다시 그리지는 않는다.
화면을 다시 그리지는 않지만 함수가 실행된다는 점에서 어느정도 시간을 잡아먹기 때문에 리렌더링이 너무 많이 되지만 않게 어플리케이션을 만들자
내 생각: return 부분에 들어가면서 다시 그리면 안되는 부분은 참조 자료형이다! 따라서 객체, 배열, 함수는 캐싱해서 넣자! 변해야 되는 부분(데이터 받아오는 곳)은 캐싱을 하지 않거나 의존성 배열을 잘 넣어줘야 한다!
import { useState, useCallback } from "react";
export default (initialValue = null) => {
const [value, setValue] = useState(initialValue);
const handler = useCallback((e) => {
setValue(e.target.value);
}, []);
return [value, handler];
};
리액트에서 JSX문법 안에 배열을 사용하고 싶을 땐 key를 넣어줘야 한다
norefferer noopenner는 어디서 이 사이트로 들어왔는지 같은 정보를 제공하지 않기위한 코드다
리액트나 뷰의 장점은 데이터가 바꼈을 때 알아서 화면을 바꿔준다는 점이다. 데이터가 바뀌면 알아서 리렌더링이 된다. 반면에 제이쿼리는 자기가 알아서 화면을 다시 그려줘야 한다
Echart는 차트를 만들어주는 라이브러리인데 퀄리티가 좋다
훅스가 생기면서 컴포넌트에서 클래스를 사용하지 않아도 데이터를 바로 받아올 수 있다? 컨테이너 따로 구별해주지 않아도 된다
오픈소스를 선택하기 전에 npm trends에서 검색하자
https://npmtrends.com/css-vs-material-ui-vs-sass-vs-styled-components