유지보수 하게된 프로젝트가 리액트를 써서 급히 이해한대로 정리 ^^;;
*프로젝트 뼈대!!
1. useEffect
``` useEffect(() => { //... }, []); ``` 처음 한번 들어올 때 실행하는게 대부분. 페이지 들어오자마자 api한번 요청의 느낌. 여기서 요청하고 받은 응답으로 이것저것을 한다 useEffect(() => {
if (isCheck || modalClose) {
getAlarm();
setTimeout(onCancel, 3000);
}
}, [isCheck, modalClose]);
이런식으로 쓰였을 땐 deps 바뀌면 effect 재실행
const getAlarm = useCallback(() => { ... }, []);
리렌더돼도 같은 함수 객체를 유지해주는 훅. (리랜더 돼도 참조 안바뀜)
-> "이 함수 참조를 고정해서 props/deps 비교에서 불필요한 변경을 막는다."
전체 전역 state 중에서 한 영역을 잘라낸 조각(slice)
Redux Store (전체 전역 상태)
├ user
├ auth -- 이게 하나의 slice
├ somethingA
└ somethingB
createSlice({
initialState, -- store에 넣고 싶은 상태 모양/기본값
reducers, -- 동기 작업으로 state 바꾸는 규칙
extraReducers -- 비동기 작업용 thunk가 뿌리는 pending/fulfilled/rejected에 반응해서 state 바꾸는 규칙
});
reducers: {
setModal(state, action) {
state.isModal = action.payload;
}
}
밖에서는 아래와 같이 쓴다.
dispatch(modalActions.setModal(true))
redux-persist
새로고침해도 남겨둘 전역 state를 localStorage에 자동으로 저장·복원해주는 애
useMemo
const memoValue = useMemo(() => {
// 계산/생성
return something;
}, [deps]);
deps 중 하나라도 변경 → 다시 실행 → 새 값 반환
deps 안 변함 → 이전 값 그대로 재사용
const value = useMemo(() => ({a,b,c}), [a,b,c])이런 코드가 있었는데요... 저는 이걸 쓰나마나한 코드라고 생각했습니다.export const SampleContext = createContext(initSampleContext);
...
const value = useMemo(() => ({a,b,c}), [a,b,c])
<SampleContext.Provider value={value}>
...