리덕스 미들웨어 제작
미들웨어는 결국 하나의 함수 이다. 함수를 연달아서 두번 리턴하는 함수로
function middleware(store) {
return function (next) {
return function (action) {
// 하고 싶은 작업...
};
};
};
이런식으로 구성이 되어있다.
첫 번째 store 는 리덕스 스토어 인스턴스이며 dispatch
getState
, subscribe
내장함수들이 들어있다.
두 번째 next는 액션을 다음 미들웨어에게 전달하는 함수. next(action)
이런 형태로 사용한다. 만약에 미들웨어가 존재하지 않는다면 리듀서에게 액션을 전달해 준다.
만약에 next를 호출하지 않게 된다면 액션이 무시 처리되어 리듀서에게 전달되지 않는다.
세번째 action 은 현재 처리하고 있는 액션 객체이다.
직접 작성해보기
이전에 작성한 src디렉터리에 middlewares
라는 디렉터리를 만들고, myLogger.js
을 작성한다.
const myLogger = store => next => action => {
console.log(action);
const result = next(action);
return result;
}
export default myLogger;
버튼을 클릭하면 호출되는 액션의 타입을 콘솔에 출력하게 된다.
미들웨어 적용하기
미들웨어를 적용할 때는 applyMiddleware 라는 함수를 사용한다.
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider} from 'react-redux';
import {createStore, applyMiddleware} from 'redux';
import rootReducer from './modules';
import myLogger from './middlewares/myLogger';
const store = createStore(rootReducer, applyMiddleware(myLogger));
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Provider store={store}>
<App/>
</Provider>
)
콘솔화면에서 myLogger로 인해서 액션의 타입이 출력된 모습이다.
미들웨어 수정
호출된 액션 타입만 호출되는게 아니라 현재 카운터의 값까지 출력하게 하고 싶으면
const myLogger = store => next => action => {
console.log(action);
const result = next(action);
console.log('\t', store.getState());
return result;
}
store.getState()
를 통해서 업데이트 이후의 상태를 콘솔로 출력하게 하면 된다.
액션 값을 객체가 아닌 함수도 받아오게 만들어서 액션이 함수타입이라면 이를 실행시키게 할 수도 있게 된다.
Author And Source
이 문제에 관하여(리덕스 미들웨어 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhs000123/리덕스-미들웨어-제작저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)