본문 바로가기
React를 같이 배워보자

React24일차-redux-saga

by 멈추지않아 2022. 2. 13.

어제는 결국 못찾고 잠들었습니다.....ㅎㅎ

그래서 오늘은 새로운 saga를 들고 왓습니다.

이어서 하던 폴더에서 코드로 열어주시고

npm i redux-saga 해주세요

store.js 가서

import { applyMiddleware, createStore } from "redux";
import promise from "redux-promise-middleware";
import thunk from "redux-thunk";
import fileReducer from "./modules/reducer";
import { composeWithDevTools } from "redux-devtools-extension";
import createSagaMiddleware from "@redux-saga/core";
const Saga = createSagaMiddleware();
const store = createStore(
  fileReducer,
  composeWithDevTools(applyMiddleware(thunk, promise, Saga))
);

export default store;

작성

const Saga = createSagaMiddleware(); 이부분을 설명하면 간단하게 Sag라는 미들웨어를 만들어서 Saga에 저장해주고
 composeWithDevTools(applyMiddleware(thunk, promise, Saga)) 이렇게 해서  devtools로 관리및사용 가능하게 하는 겁니다.

그럼이제 안에 넣을 내용을 만들어주러 가봅시다\

redux/moudles/user.js로 이동

import { put, takeEvery } from "@redux-saga/core/effects";
function* SageUser() {
  const res = yield [
    { name: "mark1", id: 1 },
    { name: "mark2", id: 2 },
    { name: "mark3", id: 3 },
    { name: "mark4", id: 4 },
    { name: "mark5", id: 5 },
  ];
  yield put(indata(res));
}
const SagaStart = "SagaStart";
export function SagaUserStart() {
  return {
    type: SagaStart,
  };
}
export function* UseSaga() {
  yield takeEvery(SagaStart, SageUser);
}
 
추가해주세요

import 부분은 위에 적으시면 됩니다.

이제 설명해보겠습니다.

Sageuser는 사과를 어떻게 사용할건지 입니다. 즉 내용이죠  res에데이터를 받아서 put을 이용해서 dispatch하는 것입니다. 

그럼 yield는 뭐냐고 생각하실텐데 각 행동의 시작점이라고 생각하시면 됩니다. yield마다 행동 하나 하나라고 생각하시면 되요

SagaUserStart는 뭔지 아시겠죠? 그냥 SagStart를 보내줌으로써  사과를 시작할 신호역할을 하는 겁니다.

그럼 useSaga에서  type:SagaStart를 받아서 SageUser를 실행합니다.

그럼이제 modules안에 SagaRoot.js를 만들어주시고

import { all } from "redux-saga/effects";
import { UseSaga } from "./user";
export default function* rootSage() {
  yield all([UseSaga()]);
}

여기는 all만 설명하겠습니다.all은 Saga들을 합쳐주느것이에요 지금은 한개밖에 없지만 여러개가 된다면 합치고 이것들을 실행 시켜줍니다. 여기서 실행시켜준다는 것은 우리가 일반적으로 생각하는 함수실행가는 다른 개념입니다. 그냥 간단하게 합쳐준다고 생각하시면 편해요

다시 redux/store.js 로 이동해주세요

Saga.run(rootSage);
추가
여기서는 만들어둔 공간에 합쳐진 사과를 올려준다고 생각하시면 편합니다.

src/components/use.js 이동

import Liststore from "../hook/liststore";
import addstore from "../hook/addstore";
import { SagaUserStart } from "../redux/modules/user";
import { useEffect } from "react";

export default function List() {
  const state = Liststore();
  const dispatch = addstore();
  useEffect(() => {
    dispatch(SagaUserStart());
  }, [dispatch]);

  return (
    <div>
      {state.user.data.map((p) => (
        <li key={p.id}>{p.name}</li>
      ))}
    </div>
  );
}

useEffect내부에 dispatch내부내용을 바꺼서 Saga를 사용해서 실행하면 데이터가 잘 전달되는지 확인해보겠습니다.

npm start 해주세요 

이렇게 잘나온느것을 확인할수 있습니다.

'React를 같이 배워보자' 카테고리의 다른 글

React25일차-mobx  (0) 2022.02.19
React24일차-redux-action  (0) 2022.02.13
React23일차- 오늘은 쉬어가세요 ㅎㅎ  (0) 2022.02.12
React22일차-promise and redux dev tools  (0) 2022.02.11
React22일차-Duckspattern  (0) 2022.02.11