넷플릭스 만들기 리뷰 및 복습
const initialValue = {
nickname: "",
updateNickname : () => {}
likedMovies: () => {}, //좋아요를 누른 영화 목록을 저장한다. movieId 들 저장.
};
const ProfileContext = createContext(initialValue);
export const useProfile useContext(ProfileContext)
export function ProfileProvider({ children }) {
const [nickname, setProfile] = useState();
const [likedMovies, setLikedMovies] = useState();
const setNickname = (newNickName) => {
setProfile(newNickName);
};
return 안에 onChange 로 닉네임 변경되는거 다 받으면, 마이페이지에 모든게 리렌더링돼.
=> 복잡한 페이지면 부하.. => 리렌더링이 계속 되지 않는 UserRef() 를 이용하자!
-리렌더링과 무관하게 유지가 됨.
기존 state 와 차이는 useRef는 참조를 보관만 해서 리렌더링만 됨.
저장은 하는데 값이 아닌 객체의 주소값을 담고만 있어
ref 아래 current 아래에 값이 들어있어.
이것을 이용해, 버튼을 누를때만 inputValue 를 꺼내서 저장하게!
const nicknameInputRef = useRef();
페이지 컴포넌트 안에 요소가 5000개 있어.
기존 Page 안에 있던 input 컴포넌트를 분리해 (스테이트를 분리하기만 하면) Page 에서 과부하 안일어나!
못 분리할때는 useRef 쓰는편
배열을 업데이트 해줄때는 불변성 제어로
배열을 삭제할때는
새로운 배열을 내보내는 filter를 사용한다
findIndex 는 있으면 인덱스, 없으면 -1 리턴.
-1은 falsy 값이 아님으로 !! 할때 못써.
링크가 감싸고 있어서 좋아요 눌러도 이동하는데, 이를 막기 위해
e.preventDefault 를 사용한다.
전역 상태 관리
store 라는 저장소를 만든다.
유튜브로 비유하면 store 안에 있는 컴포넌트가 구독한 store 안에 채널만 변경함.
Redux는 데이터를 아무대서나 못바꾸게 해놨어.
데이터는 반드시 공장에서만 바꿀 수 있어. 공장의 작업지시서에 따라서만 이것대로 데이터를 바꿔줘. 이 작업지시서는 요청한 쪽(컴포넌트) 에서만 쓸 수 있어.
이 과정에서 우체부 같은게 작업지시서를 공장으로 보내줘.
공장에서는 아무 작업이나 받지 않아. 공장이 받는 작업지시서 목록이 있어.이 작업들만 해주지. ex) 1번 해줄수있고 2번 해줄수 있고. 여기에 있는것만 요청할 수 있어.
작업지시서에 숫자를 N만큼 올리게 하고 싶어. 컴포넌트는 작업지시서를 작성하고 여기에는 작업명, 작업에 필요한 정보 등등 필요한것도 넣고 우체부를 통해서 공장으로 보내.
데이터 저장소(상태를 저장하는곳) = 스토어 store
공장(변화시키는곳) = reducer
받아주는 작업명(공장이 가능한 작업들) = Action type
작업지시서 = Action
작업지시서를 쓸때는(컴포넌트가 지시서만들때) = Action creater
요청서에 쓰는 작업명은 = Action type
작업에 필요한 정보들 = payload
우체부(전달하는 행위) = dispatch
간단하게 만들어놓은것.
잠깐만 해도 쓸 수 있어서 혼자 공부하기.
클라이언트 state 관리 용.
리액트 쿼리를 요청하면 서버에서 불러와 보관하고 있고, 캐시처럼 사용하면됨.
redux 였으면 fetch 하고 뭐하고 했는데 얜 서버의 상태와 동기화를 해줌
닉네임을 바꾸면 업데이트 요청을 하고 석세스 됐으면, 기존 정보 날리고, 새로운 값을 서버에서 받아오기.
서버 사이드 상태관리를 위해 사용함.
git reset --hard 로 다 지우고 pull
Redux 설치
https://redux.js.org/introduction/installation
순서대로 설치하자.
//store 안에 있는 값 꺼낼때는 useSelector 를 사용
컨텍스트 vs 리덕스
store 는 하나, 공장은 여러개
스코프를 하나만.
공장에는 action 이 들어가야하고, type에 따라 switch 해서
action(type, payload) + state =>reducer
index.js 에 Provider 넣어주고. store를 생성한다음에