createSlice에서 state 수정 함수 만들고,
원할 때 그 함수 실행해달라고 store.js에 요청
순서대로 봐보자면
state 수정 함수 만들어주기
let state이름 = createSlice({
name : 'state이름',
initialState : 'value',
// state 수정함수
reducers : {
수정함수이름(🔸파라미터 넣으면 기존 state 담김🔸){
// 🔸새로운 값 return해주면 state 변경됨!!🔸
return 'new value';
}
}
})
만든 함수 export 해주기
state이름.actions
// state 변경 함수들이 담김
// 관습적으로 Destructuring 사용
export let {setState, changeState, ...} = state이름.actions;
컴포넌트에서 useDispatch와 함께 import 해서 사용
useDispatch는 store.js에 요청을 보내주는 함수
useDispatch는 요청만, 실행은 store.js가!!
import 하기
// 변경함수 import
import setState from '/store경로'
// useDispatch import
import {useDispatch} from "react-redux";
사용하기
// 컴포넌트 안에서 useDispatch
let dispatch = useDispatch();
// dispatch로 import한 변경함수 사용
<button onClick={()=>{
dispatch(setState());
}}> change </button>
방법이 다소 복잡해 보이는데,
정해진 형식이라 어쩔수 없음
그리고 사실상 사이즈가 커지다보면 버그 방지등 장점이 많음
=> 다양한 컴포넌트가 state를 직접 수정하려다보면 버그 발생시 원인 찾기 어려움
=> 수정함수를 통하면 버그 추적이 용이 (state 이상해지면 store.js의 수정함수만 문제!!)
let user = createSlice({
name : 'user',
initialState : {name : 'kim', age : 27},
reducers : {
setName(){
return {name : 'Yu', age : 27}
}
}
})
reducers : {
setName(state){
state.name = 'Yu'
}
}
let user = createSlice({
name : 'user',
initialState : {name : 'kim', age : 27},
reducers : {
agePlus(state, action){
state.age += action.payload;
}
}`