
1) React.memo 컴포넌트 메모이제이션
const Componenet = memo(()=>{})
2) React.useCallback 함수 메모이제이션
const onClickReset = useCallback(() => {
setNum(0);
}, []);
3) React.useMemo 변수 메모이제이션
const sum = useMemo(()=>{
return 복잡한 로직;
},[])
1. createContext로 Context의 프로바이더 작성
2. Context의 프로바이더로 글로벌 State 영역을 컴포넌트로 감싸기
3. State를 참조할 곳에서 useContext 사용하기
1) createContext로 Context의 프로바이더 작성
import { createContext, useState } from "react";
export const AdminFlagContext = createContext({});
export const AdminFlagProvider = (props) => {
const { children } = props;
const [isAdmin, setIsAdmin] = useState(false);
return (
<AdminFlagContext.Provider value={{ isAdmin, setIsAdmin }}>
{children}
</AdminFlagContext.Provider>
);
};
2) Context의 프로바이더로 글로벌 State 영역을 컴포넌트로 감싸기
import ReactDOM from "react-dom";
import { App } from "./App";
import { AdminFlagProvider } from "./components/providers/AdminFlagProvider";
ReactDOM.render(
<AdminFlagProvider>
<App />
</AdminFlagProvider>,
document.getElementById("root")
);
1) State를 참조할 곳에서 useContext 사용하기
import { useContext } from "react";
import { AdminFlagContext } from "./providers/AdminFlagProvider";
const style = {
width: "100px",
padding: "6px",
borderRadius: "8px",
};
export const EditButton = () => {
// Context 안의 Admin을 얻는다
const { isAdmin } = useContext(AdminFlagContext);
return (
<button style={style} disabled={!isAdmin}>
수정
</button>
);
};
[!quote] 렌더링 최적화 : (컴포넌트, 함수, 변수)메모이제이션(모든 참조 컴포넌트의 비효율적 렌더링을 막기위한 방법)
글로벌 State 관리 : 무한 prop전달 대신 Context, Redux, Recoil(상황에 맞춰 관리법 설정하여 사용)