什么是 redux-middlewares
redux-middlewares 是一个用于管理 Redux 中间件的 npm 包。Redux 中间件是 Redux 提供的扩展机制,用于在 Redux 的 action 到达 reducer 之间对 action 进行截获、拦截或修改。redux-middlewares 将所有中间件进行了封装,使得我们在使用时更加方便。
安装
我们可以使用 npm 命令行工具安装 redux-middlewares:
npm install redux-middlewares
使用
想要使用 redux-middlewares,我们需要先将其导入到我们的 js 文件中:
import {applyMiddleware} from 'redux'; import * as middlewares from 'redux-middlewares';
其中的 applyMiddleware 函数是 Redux 提供的方法,用于集成中间件。我们可以把 middlewares 对象传入 applyMiddleware 函数中来应用中间件。例如:
const store = createStore( reducer, applyMiddleware(middlewares.logger) );
上述代码中,我们将 middlewares.logger 应用到了 reducer 中,它将会对每一个经过 Redux 的 action 进行详细打印输出,方便我们进行调试。
除了 logger 中间件外,redux-middlewares 中还提供了许多其他中间件:
createThunkMiddleware
createThunkMiddleware 中间件允许我们在 action Creators 中写异步的 action。例如:
-- -------------------- ---- ------- ------ - ------------ - ---- ---------------- ------ - --------------------- - ---- -------------------- ----- ------------- - --------------------------- ----- --------- - -- -- ---------- -- - --------------------------------- ------------- ---------------- -- ---------------- ------------ -- -------------------------------------- -------------- -- --------------------------------------- - ------ ----- ---------- - ------------------------
上述代码中,我们使用 createThunkMiddleware 中间件允许我们在 fetchData 函数中进行异步的 action 操作,通过 dispatch(actionCreator.request())、dispatch(actionCreator.success(data)) 和 dispatch(actionCreator.failure(error)) 将请求的结果传递到 reducer 中。
createSagaMiddleware
createSagaMiddleware 中间件是一个强大的中间件,提供了以前只能在 Redux-saga 中使用的功能。它允许我们在一个独立的线程中调用异步代码,还支持取消异步操作。下面是一个示例:
-- -------------------- ---- ------- ------ - ------------ - ---- ---------------- ------ - -------------------- - ---- -------------------- ----- ------------- - --------------------------- --------- ----------- - --- - ----- -------- - ----- ----------- ------- ----- ---- - ----- ---------------- ----- --------------------------------- - ----- ------- - ----- ---------------------------------- - - ------ ----- ---------- - ---------------------- ------ - ------- - ----- ------------------------ ----------- - - ---
上述代码中,我们使用了 createSagaMiddleware,它可以让我们将异步操作分离为单独的 sagas 函数,并且支持取消异步操作。
除了上面的中间件外,redux-middlewares 包还提供了 AuthMiddleware、FaviconMiddleware、FormicMiddleware、ImmutableStateMiddleware、NotificationMiddleware、PaginationMiddleware、RouterMiddleware、TimeoutMiddleware 和 还支持自定义插件。
注意事项
在使用 redux-middlewares 时,需要注意以下几点:
- 一个 action 可以同时被多个中间件截获并处理,如果不小心改变了 action,后续中间件将会接收到修改以后的 action,可能引起错误。
- createThunkMiddleware 和 createSagaMiddleware 并不兼容,因为它们同样用于处理异步 action。如果把它们混用,可能会导致不可预测的结果。
- 在使用 LoggerMiddleware 时,需要确保所有的 action、reducers 和 middleware 都是纯函数,否则打印的日志可能会不准确或有误导性。
结语
redux-middlewares 提供了许多强大的工具让我们更加便捷地编写 Redux 应用程序,同时使得我们能够更加专注于业务逻辑的编写,节省大量时间。希望本篇技术文章对你有所帮助,如有不当之处,还望不吝指教。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067008e361a36e0bce8b4c