memo, useCallback 사용 후에도 리렌더링 되는 이슈발생. 이유를 찾아보니 useContext 때문이었다.
state와 dispatch context를 분할하여 사용
import React, { createContext, useReducer } from "react";
import { MakerReducer } from "./maker_reducer";
export const MakerContext = createContext();
const initState = { ... };
const MakerStore = ({ children }) => {
const [cards, dispatch] = useReducer(MakerReducer, initState);
return (
<MakerContext.Provider value={{ cards, dispatch }}>
{children}
</MakerContext.Provider>
);
};
import React, { createContext, useReducer } from "react";
import { MakerReducer } from "./maker_reducer";
export const MakerStateContext = createContext();
export const MakerDispatchContext = createContext();
const initState = { ... };
const MakerStore = ({ children }) => {
const [cards, dispatch] = useReducer(MakerReducer, initState);
return (
<MakerDispatchContext.Provider value={dispatch}>
<MakerStateContext.Provider value={cards}>
{children}
</MakerStateContext.Provider>
</MakerDispatchContext.Provider>
);
};
import { MakerStateContext } from "store/maker_store";
const cards = useContext(MakerStateContext);
import { MakerDispatchContext } from "store/maker_store";
const dispatch = useContext(MakerDispatchContext);