어플이 점점 커지고, 다양한 기능을 활용하려면 결국 전역 상태관리는 필요하게 되는 것 같습니다.
// npm
npm install @reduxjs/toolkit react-redux
// yarn
yarn add @reduxjs/toolkit react-redux
import { configureStore } from '@reduxjs/toolkit';
import locationReducer from './modules/location';
const store = configureStore({
reducer: {
location: locationReducer,
// 추후에 만들어질 리듀서가 들어갔습니다.
},
});
export default store;
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import store from 'store';
const rootElement = document.getElementById('root');
if (rootElement instanceof HTMLElement) {
const root = ReactDOM.createRoot(rootElement);
root.render(
<Provider store={store}>
<App />
</Provider>,
);
}
import { type PayloadAction, createSlice } from '@reduxjs/toolkit';
import { type RootState } from 'store';
interface StateType {
location: string;
}
const initialState: StateType = {
location: '서울',
};
export const locationSlice = createSlice({
name: 'location',
initialState,
reducers: {
setLocation: (state, action) => {
state.location = action.payload;
},
},
});
export const locationActions = locationSlice.actions;
export default locationSlice.reducer;
const dispatch = useDispatch();
const locationBtnHandler = () => {
dispatch(locationActions.setLocation(locationKr));
navigate('/home/nearby');
};
const location = useSelector((state) => state.location.location);