Redux 미들웨어 의 실천 에 대하 여 말씀 드 리 겠 습 니 다.
미들웨어 를 왜 사용 합 니까?
Redux 를 이용 하여 상태 관 리 를 할 때 사용자 가 UI 차원 에서 행동 을 촉발 합 니 다.하나의 action 대상 은 store.dispatch 를 통 해 Reducer 에 보 내 서 촉발 합 니 다.그 다음 에 Reducer 는 type 에 따라 해당 하 는 Store 의 상태 트 리 를 업데이트 하고 변 경 된 state 는 해당 구성 요소 의 새로운 렌 더 링 을 촉발 합 니 다.아래 그림 과 같다.이 프로 세 스에 서 action 대상 은 동기 화 대상 으로 type 필드 를 포함 하 는 간단 한 대상 입 니 다.그러나 서버 를 방문 할 때 브 라 우 저 는 단일 라인 이기 때문에 서버 가 돌아 오 기 를 기다 리 는 구성 요소 가 한 번 에 나타 나 지 않 기 때문에 서버 와 의 정상 적 인 통신 을 실현 하기 위해 비동기 접근 방법 을 설계 해 야 합 니 다.
중간 부품 소개
Redux 구조 에서 하나의 action 대상 은 store.dispatch 를 통 해 발송 되 고 reducer 함 수 를 호출 하기 전에 중간 부분 을 거 칩 니 다.다음 그림 과 같 습 니 다.
위의 그림 에서 알 수 있 듯 이 하나의 Redux 구조 에서 여러 개의 미들웨어 를 사용 할 수 있 고 이 미들웨어 들 은 요청 한'파이프'를 함께 조직 하여 처리 할 수 있다.하나의 중간 부품 은 하나의 독립 된 함수 로 조합 하여 사용 할 수 있다.중간 부품 은 하나의 통 일 된 인터페이스 가 있다.바로 하나의 중간 부품 이 하나의 특정한 기능 만 완성 할 수 있 기 때문에 여러 개의 중간 부품 을 조합 해야만 비교적 풍부 한 응용 수 요 를 만족 시 킬 수 있다.물론 사용 할 때 도 들 어 오 는 action 을 순서대로 처리 해 야 합 니 다.앞 에 있 는 미들웨어 가 임 무 를 완성 한 후에 야 뒤의 미들웨어 가 action 을 계속 처리 할 수 있 습 니 다.
중간 부품 의 특징
4.567917.중간 부품 은 독립 된 함수 이다.4.567918.
4.567917.중간 부품 을 조합 하여 사용 할 수 있다.4.567918.
4.567917.중간 부품 은 통 일 된 인터페이스 가 있다.
중간 부품 인터페이스
모든 미들웨어 는 하나의 함수 로 정의 되 어야 합 니 다.next 매개 변 수 를 받 아들 이 는 함 수 를 되 돌려 야 합 니 다.이 next 매개 변 수 를 받 아들 이 는 함 수 는 action 매개 변 수 를 받 아들 이 는 함 수 를 되 돌려 줍 니 다.next 매개 변수 자체 도 함수 입 니 다.미들웨어 가 이 next 함 수 를 호출 하여 Redux 에 게 자신의 처리 작업 이 끝 났 음 을 알 립 니 다.
아무것도 하지 않 는 미들웨어 코드 는 다음 과 같다.
function doNothingMiddleware({dispatch, getState}) {
return function(next){
return function(action){
return next(action);
}
}
}
포 함 된 기능 은:dispatch 를 호출 하여 새로운 action 대상 을 보 냅 니 다
// ( ) dispatch , dispatch
export default function applyMiddleware(...middlewares) {
//return , createStore , store dispatch
return createStore => (...args) => {//agrs reducer, preloadedState, enhancer
const store = createStore(...args)
let dispatch = () => {
throw new Error(
`Dispatching while constructing your middleware is not allowed. ` +
`Other middleware would not be applied to this dispatch.`
)
}
//
const middlewareAPI = {
getState: store.getState,
dispatch: (...args) => dispatch(...args)
}
// middlewareAPI ,
const chain = middlewares.map(middleware => middleware(middlewareAPI))
// compose
dispatch = compose(...chain)(store.dispatch)
return {
...store,
dispatch
}
}
}
중간 부품 과 증강 기의 차이미들웨어 와 인 텐 시파 이 어 는 모두 Redux Store 에 대한 강화 이지 만 미들웨어 는 Redux Store 의 dispatch 방법 만 강화 했다.즉,dispatch 함수 에서 action 대상 으로 호출 되 어 reducer 에 의 해 처리 되 는 과정 에서 의 조작 이다.인 텐 시파 이 어 는 Redux Store 에 대해 더욱 깊 은 차원 의 강화 맞 춤 형 제작 을 하 는 것 이다.Store Enhancer 를 사용 하고 인 텐 시파 이 어 인 터 페 이 스 를 읽 어야 한다.하나의 증강 기 는 주어진 매개 변 수 를 이용 하여 store 대상 을 만 든 다음 에 대상 을 맞 추고 마지막 으로 Store 대상 을 되 돌려 줍 니 다.전체적인 대 비 는 다음 과 같다.
4.567917.미들웨어:redux store 의 dispatch 함 수 를 강화 할 수 있 습 니 다.즉,dispatch 함수 에서 action 대상 이 reducer 에 의 해 처리 되 는 과정 에서 의 조작 입 니 다4.567917.증강 기:redux store 에 대해 더욱 깊 은 차원 의 강화 맞 춤 형 제작 을 하면 redux store 의 여러 가지 측면 을 강화 할 수 있다비동기 접근 서버:
비동기 액 션 대상
미들웨어 를 도입 하지 않 았 을 때 사회 관리 서브 시스템 이 개발 할 때 모든 action 은 동기 화 되 었 고 동기 화 된 action 대상 은 type 필드 를 포함 하 는 간단 한 대상 이지 만 우 리 는 비동기 action 대상 을 실현 해 야 한다.함수 이다.action 이 트리거 된 후에 reducer 가 명령 을 받 기 전에 비동기 작업 을 할 수 있다.
저 희 는 redux-thunk 을 도입 하여 비동기 접근 서버 방법 을 실현 합 니 다.서버 에 접근 하 는 action 은 적어도 세 개의 action 유형 과 관련 되 어야 합 니 다.
Redux-thunk 미들웨어 는 Redux 에서 비동기 작업 을 하 는 해결 방법 중 하나 로 action 대상 이 reducer 함수 로 처리 되 기 전에 비동기 기능 을 삽입 하 는 시기 이 고 코드 는 매우 간단 합 니 다.
function create ThunkMiddleware(extraArgument){
return ({dispatch, getState}) => next => action => {
if(typeof action === ‘function'){
return action(dispatch, getState, extraArgument);
}
return next(action)
}
}
const thunk = createThunkMiddleware();
export default thunk;
createThunk Middleware 함 수 는 하나의 함 수 를 되 돌려 줍 니 다.모든 action 대상 을 실제 처리 하 는 함수 입 니 다.먼저 매개 변수 action 의 유형 을 검사 합 니 다.함수 형식 이 라면 이 action 함 수 를 실행 하고 dispatch 와 getState 를 실행 합 니 다.매개 변수 로 전달 되 지 않 으 면 next 를 호출 하여 다음 미들웨어 로 action 을 계속 처리 합 니 다.
Redux-thunk 의 사용:
우선,redux-thunk 을 설치 하고 node.js 가 설 치 된 명령 창 에서"npm install redux-thunk-save-dev"를 실행 하 며 store.js 에 redux-thunk 을 도입 하고 redux 의 apply Middleware 함수 도 도입 하도록 확보 합 니 다.구체 적 인 실현 코드 는 다음 과 같다.
import {createStore, combineReducers, applyMiddleware} from ‘redux';
import {otherState, dataState} from ‘reducers';
import thunkMiddleware from ‘redux-thunk';
var reducers = combineReducers({
otherState,
dataState
});
var store = createStore(reducers, applyMiddleware(thunkMiddleware));
export default store;
redux-thunk 을 성공 적 으로 도입 한 후에 우 리 는 비동기 작업 의 action 대상 을 설계 해 야 한다.예 를 들 어 설비 관리 모듈 에서 설비 정 보 를 성공 적 으로 저장 한 후에 설비 정 보 를 다시 얻 으 려 면 코드 는 다음 과 같다.
function saveInfo(params){
let url = “/api/device”;
return function(dispatch, getState){
dispatch(saveInfoRequest());
return Http.get(url, {
params: params
}).then(res=>{
if(res && res.type === 0){
dispatch(saveInfoSuccess ());
let dataState = getState().dataState;
let newParams = {
start: dataState.start,
limit: dataState.limit,
searchName: dataState.searchName
};
dispatch(getInfo(newParams))
}
}).catch(error=>{
dispatch(saveInfoFailure (error));
});
}
}
이 saveDeviceInfo 에서 돌아 오 는 함수 에서 dispatch 는 동기 화 된 action 대상 일 뿐만 아니 라 다른 비동기 action 대상 을 파견 하여 선후 관 계 를 가 진 업무 논 리 를 만족 시 킬 수 있 습 니 다.코드 의 가 독성 은 Promise 로 실현 하 는 코드 보다 더욱 뚜렷 합 니 다.Redux-logger 사용
개발 단계 에서 우 리 는 redux 데이터 흐름 의 모든 절 차 를 모니터링 해 야 합 니 다.log 출력 이 필요 합 니 다.redux-logger 는 공식 적 으로 추천 하 는 로그 미들웨어 로 사용 하기에 매우 편리 합 니 다.물론 redux-logger 를 적용 하려 면 시스템 에서 redux 를 사용 하여 상태 관 리 를 해 야 합 니 다.그렇지 않 으 면 로그 출력 이 없습니다.
Redux-logger 의 사용 방법 은 두 가지 로 나 눌 수 있 는데 기본 적 인 사용 방법 은 다음 과 같다.
import { applyMiddleware, createStore} from ‘redux';
import logger from ‘reudx-logger'
const store = createStore(
Reducer,
applyMiddleware(logger)
)
로그 출력 미들웨어 를 직접 쓸 수도 있 습 니 다.코드 는 다음 과 같 습 니 다.
var logger = store => next => action => {
console.log('[action]', action)
console.log(`[action] type:${action.type} payload:${JSON.stringify(action.payload)}`)
next(action)
console.log('[store]', store.getState())
console.log(`[store] ${JSON.stringify(store.getState())}`)
}
총결산Redux 미들웨어 는 store.dispatch 방법 을 강화 할 수 있 고 여러 미들웨어 는'파이프'를 구성 하여 action 대상 을 순서대로 처리 할 수 있 으 며 순서대로 처리 한 후에 야 reducer 에 의 해 처리 할 수 있 습 니 다.미들웨어 의 응용 장면 이 매우 많 습 니 다.비동기 접근 서버 를 지원 할 수 있 을 뿐만 아니 라 좋 은 미들웨어 플러그 인 도 많 습 니 다.예 를 들 어 react-addons-perf 와 디 버 깅 을 하고 redux-logger 와 상 태 를 기록 할 수 있 으 며 업무 수요 에 따라 스스로 미들웨어 를 작성 할 수 있 습 니 다.응용 이 매우 효과 적 이 고 다른 react 프로젝트 에서 많이 실천 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redux Toolkit 사용!최근에 처음으로 Redux Toolkit을 사용해 봤습니다! 우선 Redux가 무엇인지 미리 기재해 두세요. state를 업데이트할 때 디스패치 함수를 사용하여 액션을 Reducter에 보내고 액션의 type에 따라...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.