redux-promise

106 阅读1分钟

redux-promise中间件的应用有两种情况: 1,当dispatch收到的是一个Pomise实例,会dispatch掉resolve的值,而对reject不做处理

import { useEffect, useState } from 'react';
import { createStore, applyMiddleware } from 'redux';
import promiseMiddleware from 'redux-promise';
const initstate = {
  num: 0,
};

const reducers = (state = initstate, action) => {
  switch (action.type) {
    case 'add':
      return { ...state, num: state.num + action.payload };
    default:
      return state;
  }
};

const store = createStore(reducers, applyMiddleware(promiseMiddleware));

function App() {
  const [num, setNum] = useState(store.getState().num);

  useEffect(() => {
    const unsubscribe = store.subscribe(() => {
      setNum(store.getState().num);
    });

    //组件销毁的时候同时取消订阅函数,避免多次订阅
    return () => {
      unsubscribe();
    };
  }, []);
  const getAsync = () => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          type: 'add',
          payload: 5,
        });
      }, 100);
    });
  };

  return (
    <>
      {num}
      <button
        onClick={() => {
          store.dispatch(getAsync());
        }}
      >
        增加
      </button>
    </>
  );
}

export default App;

2,当payload传递的是一个promise的时候,会dispatch这个promise resolve的值。reject不做处理。

 const getAsync = () => {
    return {
      type: 'add',
      payload: new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(100);
        }, 100);
      }),
    };
  };