Front-end/React

[TIL] 데이터 Redux로 관리

성중 2022. 1. 10. 17:32

데이터 Redux로 관리

Redux를 활용해 App.js에서 Footer의 활성화 상태를 임의로 관리해보자!

 

[modules/footer.js]

const initialState = {
  active: true,
};
 
function footer(state = initialState, action) {
  switch (action.type) {
      case 'ACTIVE':
        return {
          ...state,
          active: action.active,
        };
    default:
      return state;
  }
}
 
export default footer;

Footer 관련 reducer를 관리하는 파일이다

초기 state를 정의해주고 action에 맞는 payload를 받아와 반환하는 함수를 짜준다

 

[modules/index.js]

import { combineReducers } from 'redux';
import footer from './footer';
 
const rootReducer = combineReducers({
  footer,
});
 
export default rootReducer;

reducer 파일들을 combineReducers로 묶어주는 파일이다

 

[index.js]

const store = createStore(rootReducer);
 
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

index.js에서 해당 파일이 store로 들어간다

 

[App.js]

import { useSelector, useDispatch } from 'react-redux';
 
export default function App() {
  let state = useSelector((state) => state.footer );
  let dispatch = useDispatch()
 
  return (
          <button onClick={()=> {dispatch({ type : 'ACTIVE', active : true })} }>Footer 활성화</button>
          <button onClick={()=> {dispatch({ type : 'ACTIVE', active : false })} }>Footer 비활성화</button>
          {state.active === true ? <Footer/> : null}

이렇게 active 값을 payload로 보내 Redux로 Footer 활성화 상태를 임의로 관리해 보았다

 

+++

useEffect에 dispatch를 넣을 때 주의점

  useEffect(() => {
    dispatch({ type : 'ACTIVE', active : false });
  },[]);

의존성 배열을 빈 값으로 넣어두면 무한 랜더링을 방지할 수 있다!

* 의존성 배열은 배열 안에 담긴 값들을 추적하고 변화가 생길 때마다 콜백함수를 업데이트 할 수 있게 해준다


+++

Slide 활성화

컴포넌트를 mount/unmount 시키지 않고 화면 외부에 존재하다가 나타나도록 해보자

      <div
        className="footer_container"
        style={{ bottom: !reduxValue.active && '-105px' }}>

Redux의 active 상태에 따라 위치값을 조절해 화면 밖에서 올려준다

.footer_container {
  position: fixed;
  bottom: 0;
  width: 100%;
  transition: all 0.5s;
}

bottom 값이 조절되며 Footer가 slide up/down으로 이동하고 transition: all로 애니메이션도 구현된다!

'Front-end > React' 카테고리의 다른 글

[TIL] 클래스형 컴포넌트에서 Redux payload  (0) 2022.01.13
[TIL] Redux DevTools  (2) 2022.01.11
[TIL] React Howler 재생바 넓이  (2) 2022.01.07
[코딩애플] #7 Redux  (4) 2022.01.04
[TIL] React Datepicker 시간 선택 커스텀  (10) 2021.12.23