針對前端頁面所用到的各種狀態根據不同feature,切成不同Slice管理狀態,ex: userSlice.js themeModeSlice.js,加入到store之後被頁面使用
File Structure:
userSlice.js
import { createSlice } from '@reduxjs/toolkit'
export const userSlice = createSlice({
name: 'User',
initialState: {
user: null,
listFavorites: [],
},
reducers: {
setUser: (state, action) => {
if (action.payload === null) {
localStorage.removeItem('actkn')
} else {
if (action.payload.token) {
localStorage.setItem('actkn', action.payload.token)
}
}
state.user = action.payload
},
setListFavorites: (state, action) => {
state.listFavorites = action.payload
},
removeFavorite: (state, action) => {
const { mediaId } = action.payload
state.listFavorites = [...state.listFavorites].filter(item => item.media.toString() !== mediaId.toString())
},
addFavorite: (state, action) => {
state.listFavorites = [action.payload, ...state.listFavorites]
},
},
})
export const { setUser, setListFavorites, addFavorite, removeFavorite } = userSlice.actions
export default userSlice.reducer
store.js
import { configureStore } from '@reduxjs/toolkit'
import userSlice from './features/userSlice'
import themeModeSlice from './features/themeModeSlice'
const store = configureStore({
reducer: {
user: userSlice,
themeMode: themeModeSlice,
},
})
export default store