TIL

React_counter 만들기

minnjeong 2023. 4. 28. 22:48

 

 

리덕스를 이용해 counter 프로그램을 만들어 보겠다.

 


 

📌 파일 구조

 

redux (리덕스 관련 코드)

 -modules (state의 그룹. ex : todos.js)

    -counter.js

 -config (리덕스 설정 관련 파일)

    -configStore.js (중앙 state 데이터 관리소 -> 설정 코드)

 

 

 

📌 counter.js

 

//초기 상태값
const initialState = {
    number : 0
};

//useState로 아래처럼 작성할 경우 0에 해당하는 초기값이 위 initialState이다.
//const [number, setNumber] = useNumber(0)

//리듀서 : state에 변화를 일으키는 함수
//(1)state를 action의 type에 따라 변경하는 함수

// input에 state와 action을 받는다.
// action은 type과 value가 있다. action은 state를 어떻게 할건지
const counter = (state = initialState, action) => {
    switch (action.type) {
        default:
            return state;
    }
}

export default counter;
  • state의 초기값을 설정해준다. 초기값은 꼭 객체가 아니어도 된다. 배열, 원시데이터도 가능함!
  • 리듀서에 명령을 한다. > 리듀서는 변화를 일으키는 함수이기 때문이다.
  • 리듀서 인자 첫번째 자리에서는 state, 두번째 자리에서는 action이라는 것을 꺼내서 사용할 수 있다.

 

 

📌 configStore.js

 

만든 모듈을 스토어(configStore)에 연결 시킨다.

// src/redux/modules/config/configStore.js


// 원래 있던 코드
import { createStore } from "redux";
import { combineReducers } from "redux";

// 새롭게 추가한 부분
import counter from "../modules/counter";

const rootReducer = combineReducers({
  //리듀서들 !!
  counter: counter, // <-- 새롭게 추가한 부분. key,value가 같으면 생략 가능
});
const store = createStore(rootReducer);

export default store;

rootReducer 안에 코드를 추가하면 스토어와 모듈이 연결된다.

 

 

 

 

📌 App.js

 

스토어와 모듈 연결 확인하기

 

import logo from "./logo.svg";
import "./App.css";
import { useSelector } from "react-redux";

function App() {
  //여기에서 store에 접근하여, counter의 값을 읽어오고 싶다
  //useSelector 라는 훅을 사용!
  const data = useSelector((state) => {
    //위 state는 중앙저장소 안에 있는 state 전체를 말한다. ex :counter
    return state;
  });

  console.log("data", data);
  return <div>redux</div>;
}

export default App;

컴포넌트에서 스토어를 조회할 때,

react-redux에서 제공하는 useSelector 라는 훅을 사용한다.