반응형
DRF(Django Rest Framework) + React 프로젝트에서
React에서 API에 post로 데이터를 넣으려고 한다
구조는 이런 상태이다
① frontend/src/_actions/user_actions.js
rest api로 Test 모델에 임의의 데이터 items를 넣으려고 한다
데이터는 잘 들어간다
"aa": 4가 내가 임의로 넣은 값이다
② frontend/src/_reducers/user_reducer.js
근데 문제는
reducer에서 actions.payload를 console에 찍어보면 아래와 같이 뜬다는 것이다
PromiseResult에 있는 object를 가져오고 싶어도 불가능하다
온갖 방법을 다 찾아봤지만 일단 문제가 발생하는 이유는
promise 형식을 payload가 받아오지 못 하는 것이다
미들웨어 설치를 통해 문제를 해결했다
해결 방법
npm install --save redux-promise
redux-promise는 미들웨어로 actions과 reducer 사이에 존재하며, 특정 액션을 행하고 리듀서가 처리하기 전에 작업을 처리한다
redux-thunk:
dispatch에게 함수 형식을 대처하도록 함
전달받은 액션이 함수 형태일 때, 그 함수에 dispatch와 getState를 넣어서 실행해 준다
redux-promise:
dispatch에게 프로미스 형식을 대처하도록 함
프로미스가 payload로 전달되면 요청이 시작, 성공, 실패할 때 액션의 뒷부분에 _PENDING, _FULFILLED, _REJECTED를 반환한다
frontend/src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { createStore, applyMiddleware } from "redux";
import { Provider } from "react-redux";
import Reducer from './_reducers';
import promiseMiddleware from 'redux-promise'; // 추가
const createStoreWithMiddleware = applyMiddleware(promiseMiddleware)(createStore); // 수정
ReactDOM.render(
<Provider
store={createStoreWithMiddleware(
Reducer,
window.__REDUX_DEVTOOLS_EXTENSION__ &&
window.__REDUX_DEVTOOLS_EXTENSION__()
)}
>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
reportWebVitals();
기존에 설치했던 redux 관련 packages
npm install --save redux
npm install --save react-redux
npm install --save redux-actions
추가로 redux-thunk도 설치해 주자
반응형
'React&React-Native > React' 카테고리의 다른 글
[#. React] React UI Framework ant design에서 Internationalization을 통해 한글 설정, 사용하기 (0) | 2021.05.21 |
---|---|
[#. React] redux-persist 설치 후 새로고침해도 state 유지하기 (1) | 2021.04.27 |
[#. React] React functional 함수형 컴포넌트에서 const(arrow function) vs function 차이점 (1) | 2021.04.16 |
[#. React] Web/Mobile 웹/모바일 토글 메뉴바 toggle menubar 추가하기 (0) | 2021.04.15 |
[#. React] react-device-detect 설치 후 웹/모바일 감지해서 반응형 사이트 만들기 (0) | 2021.04.12 |