ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • React 기초 - Redux
    Framework & Library/React 2021. 9. 22. 18:39

    설정

    import React from 'react';
    import ReactDOM from 'react-dom';
    import './index.css';
    import App from './App';
    import reportWebVitals from './reportWebVitals';
    import { BrowserRouter } from 'react-router-dom';
    import { createStore } from 'redux';
    import rootReducer from './redux/reducers/reducers';
    import { Provider } from 'react-redux';
    
    const store = createStore(rootReducer);
    
    ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>
      document.getElementById('root'),
    );

    index.js 파일에서 최상위 App 컴포넌트를 <Provider> 태그로 감싸준다.

    또한 store를 createStore() 함수를 통해 생성해주고, <Provider> 태그 내 속성을 통해 설정해준다.


    action의 정의

    export const increase = () => {
      return {
        type: 'INCREMENT',
      };
    };
    
    export const decrease = () => {
      return {
        type: 'DECREMENT',
      };
    };

    action이란 상태에 어떠한 변화가 필요하게 될 때 발생하는 것이다.

    상태의 변화에 따라 액션 생성 함수를 작성한다.

    함수 앞에 export 키워드를 붙여서 다른 파일에서 사용이 가능하도록 한다.


    reducer의 정의

    import { combineReducers } from 'redux';
    
    const initState = {
      value: 1,
    };
    
    const counter = (state = initState, action) => {
      switch (action.type) {
        case 'INCREMENT':
          return {
            ...state,
            value: state.value + 1,
          };
        case 'DECREMENT':
          return {
            ...state,
            value: state.value - 1,
          };
        default:
          return state;
      }
    };
    
    const rootReducer = combineReducers({ counter });
    
    export default rootReducer;

    reducer는 상태의 변화를 일으키는 함수이다.

    reducer는 현재의 상태와 전달받은 액션을 파라미터로 받아 새로운 상태를 만들어서 반환한다.


    useSelector

    import '../App.css';
    import React from 'react';
    import { useSelector } from 'react-redux';
    
    const Top = () => {
      const value = useSelector((store) => store.counter.value);
    
      return (
        <div className="sub-container">
          <h1>Top</h1>
          번호 : {value}
        </div>
      );
    };
    
    export default Top;

    useSelector() 함수를 사용해서 store의 상태에 접근할 수 있다.


    useDispatch

    import '../App.css';
    import React from 'react';
    import { useDispatch } from 'react-redux';
    import * as actions from '../redux/actions/actions';
    
    const Bottom = () => {
      const dispatch = useDispatch();
    
      return (
        <div className="sub-container">
          <h1>Bottom</h1>
          <button onClick={() => dispatch(actions.increase())}>증가</button>
          <button onClick={() => dispatch(actions.decrease())}>감소</button>
        </div>
      );
    };
    
    export default Bottom;

    useDispatch() 함수를 통해서 액션 생성 함수를 이용해 상태 변화를 일으킨다.


     

    GitHub - qlsdud0604/react-basic: 리액트의 기초를 학습하는 공간

    리액트의 기초를 학습하는 공간. Contribute to qlsdud0604/react-basic development by creating an account on GitHub.

    github.com

     

    728x90

    'Framework & Library > React' 카테고리의 다른 글

    React 기초 - form 태그  (0) 2021.09.22
    React 기초 - Router  (0) 2021.09.22
    React 기초 - props  (0) 2021.09.22
    React 기초 - useRef 함수  (0) 2021.09.22
    React 기초 - useMemo 함수  (0) 2021.09.22

    댓글

Designed by Tistory.