23.07.04
Toolkit : 어떤 일을 간편하게 하기 위한 도구들의 모음
Redux Toolkit : Redux를 간편하게 사용하기 위한 패키지
기본 Redux
근데 이제 Redux Toolkit을 사용하면
(1) configureStore를 사용하여 configStore를 간편하게 구성할 수 있고,
(2) createSlice를 사용하여 reducer와 Action Creator를 간편하게 만들 수 있음
Redux Toolkit
const store = configureStore({
reducer: {
counter,
},
});
const counterSlice = createSlice({
name: "counter",
initialState,
reducer: {
addNumber: (state, action) => {
state.number = state.number + action.payload;
},
minusNumber: (state, action) => {
state.number = state.number - action.payload;
},
},
});
export default counterSlice.reducer;
export const { addNumber, minusNumber } = counterSlice.actions;
여기서 actions는 addNumber, minusNumber를 의미하고,
const { addNumber, minusNumber } 이렇게 밖으로 내보내줌으로써 action creator로 사용할 수 있음 !
=> 즉, createSlice는 action creator 뿐만 아니라 reducer도 만들어 내고 이로 인해 action value가 필요없어짐
두번째 예시
const todoSlice = createSlice({
name: "todos",
initialState,
// reducer가 자동으로 만들어짐과 동시에 action creator도 만들어짐
// reducer 아니고 reducers !!!!!!!!!!!!!!!!!
reducers: {
addTodo: (state, action) => {
// return [...state, action.payload];
state.push(action.payload);
},
removeTodo: (state, action) => {
return state.filter((item) => item.id !== action.payload);
},
switchTodo: (state, action) => {
return state.map((item) => {
if (item.id === action.payload) {
return { ...item, isDone: !item.isDone };
} else {
return item;
}
});
},
},
});
export const { addTodo, removeTodo, switchTodo } = todoSlice.actions;
export default todoSlice.reducer;
이처럼 아래 3가지를 한 번에 할 수 있는 createSlice API를 제공하는 redux toolkit
즉, return [...state, action.payload]; 이런식으로 새로운 객체를 리턴해줘야 함
그러므로 state.push[action.payload] 이러한 방법은 불변성을 지켜주는 것이 아니기 때문에 안되는데
redux toolkit 안에는 immer 라는 기능이 내장되어있어서 push를 해도 렌더링이 됨 ....!
=> doesitmutate를 참고하면 불변성을 유지시켜주는 메서드인지 아닌지 확인할 수 있다 !!!!!!!!!!!!!!!!!
Backend에서 실제 DB와 API Server가 구축될 때까지 Frontend 개발에 테스트로 사용할 (mock data = mock server = fake server)를 생성하기 위해 => json-server를 사용 !
즉, json-server란, (테스트 용으로 사용할) 아주 간단한 DB와 API 서버(= mock data)를 생성해주는 패키지
yarn add json-server 패키지 설치 필요 !
설치하고 나면 package.json의 dependencies(= 종속 항목) 안에서 확인 가능
+) json 형태와 객체 형태는 “ “의 유무로 구별할 수 있음 ..!
json-server는 리액트와는 별개로 따로 실행을 해줘야 함.
다시 말해 리액트도 start하고, json-server도 start 해야 함. 그래야 리액트와 json-server가 서로 통신 가능.
yarn json-server --watch db.json --port 4000
위 명령어의 대략적인 뜻은 db.json 이라는 것을 db로 삼고, 4000 포트에서 서버를 시작하겠다는 뜻
통신 = 대화 !
웹 프로그래밍 세계에서도 HTTP 통신 즉, 대화가 필요한데 … 누구와의 대화냐 ? 바로 서버(= 웹 서버) <-> 클라이언트(= 웹 브라우저)의 대화 !!!!!
HTTP 통신(= 웹 통신)은 약속(= 프로토콜)에 의해서 주고 받고, 이로 인해 오해 즉, '오류'가 없음
웹에서 서버 <-> 클라이언트 간 주고 받은 상호간의 약속(= 프로토콜)을 ‘HTTP 프로토콜’이라 함 !
요청(Request) <-> 응답(Response)
클라이언트는 서버에게 계속 요청하고, 서버는 클라이언트에게 계속 응답함
예시 https://www.hostinger.in/tutorials/what-is-a-url
HTTP 프로토콜은 약속인데
이 약속에는 여러가지 종류들이 있고 이를 메서드라고 칭함 !
메서드 : GET - 조회 / POST - 생성 / PUT, PATCH - 수정(변경) / DELETE - 삭제
=> 클라이언트가 서버에 어떠한 종류의 요청을 할 것인가 !
(참고 링크)
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
상태 코드 : 클라이언트가 서버에 요청하고 나면, 서버는 그에 맞는 응답(response) (=> Promise 객체)를 반환하는데, 이때 응답(response)은 상태 코드를 갖고 있음 !
1xx(정보) : 요청을 받았으며 프로세스를 계속 진행합니다.
2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다. => 클라이언트의 요청이 잘못
5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다. => 서버의 잘못