1. UI (Modal, Notification 등 ...) 의 State 는, 따로 StateSlice를 통해 다루는 것이 유지보수에 좋다.
<UI 전용 Slice>
import { createSlice } from "@reduxjs/toolkit";
const UISlice = createSlice({
name : ...,
initialState: ...,
reducers:{
toggleCart(){
state.showCart = !state.showCart
}
toggleNofitication(){
state.showNoti = !state.showNoti
}
...
}
})
<사용>
function App() {
const showCart = useSelector((state) => state.ui.showCart);
2. 객체에서 따로 뺀 값을 변경해도, 객체 원본이 변한다는 사실을 잊지 말자.
[복습. 들어가기 전에 참조함수에 대하여! [STATE 변경하는 꿀팁]]
const obj1 = [
{ x: 1, y: 5, z: 3 },
{ x: 3, y: 3, z: 7 },
];
const sameId = obj1.find((item) => item.x === 1);
console.log(sameId); // {x:1, y:5, z:3}
sameId.y = 10;
console.log(sameId); // {x:1, y:10, z:3}
원본 배열 객체에서, 한가지 객체만을 빼서, 변경하면, 원본 배열 객체가 변경된다.
[리덕스툴킷도 마찬가지이다]
이것을 생각하고 다음으로 넘어가자
"State 에 맞춰, 값이 변경되는 함수를 만들때"
import {createSlice} from "@reduxjs/toolkit";
cosnt xxSlice = createSlice({
...
reducers:{
addItmes(state,action){
const newItem = action.payload
const existingItem = state.items.find((item) => (item.id === newItem.id)) // 객체(state)에서 뺀것이므로, existingItem 을 변화시켜도, 원본이 변형됌
state.totalQuantity++; // 총량은 변경
if(!existingItem){
state.items.push({ // 없다면 푸쉬 [리덕스 툴킷이므로, STATE에 직접 관여 가능(실은, 툴킷의 내부함수가 그렇게 되지 않도록 변형, 적용 시키는것이지만)]
id:newItem.id
...
})
} else{
existingItem.quantity = existingItem.quantity + 1 // 객체에 담겨있는 "existingItem 직접 변경 => 원본도 변형 => 진짜 State가 변화" [이게 키포인트]
existingItem.totalPrice = existingItem.totalPrice + newItem.price
}
}
}
})
** 키포인트 : "객체에서 따로 뺀 값을 변형해도, 원본이 변형된다."
** 원본 변화를 통해, 코드가 간결해지고 가독성이 높아진다.
3. "전체 앱에 적용되는 모달의 State는 App.js 처럼 가장 비어있고, 보기좋은 곳에 넣는게 좋겠다."
[dispatch 는 직접 사용하는 곳에서]
<App.js>
import Header from "./components/Header";
import Auth from "./components/Auth";
import { useSelector } form "react-redux"
function App() {
const showCart = useSelector((state) => state.item.showCart);
return (
<Fragment>
{showCart && <Cart/>} // 이렇게 위치만 [ dispatch 는 직접 카트를 띄우는 쪽에서 하는게 좋겠다.]
<Counter />
</Fragment>
);
}
'Redux, Redux-toolkit' 카테고리의 다른 글
8. [ Redux-toolkit ] 리덕스에서 fetch 사용하여 DB 의 값 GET 요청하고 STATE 에 넣기 (1) | 2022.12.20 |
---|---|
7. Redux-ToolKit [ 비동기, 사이드 이펙트 있는 함수 다루기 e.g. fetch함수] with useEffect ** (0) | 2022.12.17 |
5. Redux-ToolKit [ Slice 분할하기 ] (0) | 2022.12.17 |
4. Redux-ToolKit [다중 슬라이스 사용해보기] (0) | 2022.12.17 |
3. Redux-ToolKit 의 이론과 기본 사용 (0) | 2022.12.17 |
댓글