在前端开发中,管理数据状态是必不可少的一项任务,Redux 是当前最流行的状态管理库之一,而它则有定制的中间件,比如 Redux-thunk,在处理异步数据请求方面表现良好。本文将详细介绍 Redux-thunk,旨在帮助读者更好地理解和使用 Redux-thunk 处理异步数据请求。
Redux-thunk 是什么?
在 Redux 中,通过创建 action 和 reducer 将应用程序的状态存储在一个 store 中。这些 action 是纯函数,它们返回一个根据现有 state 及传入参数计算所得的对象。通常情况下,这个对象中只有 type 字段,它表示了这个 action 的类型。
然而很多时候,我们需要在执行 action 前后进行异步操作,比如向服务器发起一个 API 请求,等待它响应并将得到的数据作为 action 的参数再次 dispatch 到 reducer 中。Redux-thunk 就是中间件,能够让 action 创建函数返回一个函数而不是一个 action 对象。
这个新的函数被称作 thunk,它接收 dispatch 和 getState 两个参数,并在内部执行异步操作并调用 dispatch 函数。Thunk 可以让我们控制 action 对象被返回前后的一些特殊逻辑。在被 dispatch 到 reducer 之前,Action 可以被修改,状态可以被检查,依赖等可以被注入。
下面是一个例子:
// Redux-thunk action export function getUsers() { return async (dispatch) => { dispatch({ type: 'USERS_LOADING' }); const res = await axios.get('/users'); dispatch({ type: 'USERS_LOADED', payload: res.data }); }; }
使用 Redux-thunk ,我们返回了一个函数,它接收 dispatch 函数为参数,dispatch(action)并第一次 dispatch 了一个用于标记状态为正在加载的 action,在异步 API 请求成功后,再次 dispatch 了一个包含请求数据的action , 用于更新应用程序状态。
常见用例
下面介绍 Redux-thunk 的常见用例。
异步操作
当应用程序需要执行异步操作,如:从 API 加载数据或向服务器发送数据,这时 Redux-thunk 很有用。Thunk 可以让我们在异步操作完成后 dispatch 一个 action,在这个 action 中包含异步操作的结果。
提供依赖注入
在使用 Redux-thunk 时,我们可以在 thunk 函数中注入参数并将它们传递到 action 对象中。这样可以做到在 action 中访问所有在应用程序中声明过的服务,API 或任何其他需要共享的代码。
在 action 中控制流
由于 thunk 函数的运用,我们可以在 action 的返回值中执行任何操作。使用 Javascript函数的能力,我们能够以熟悉的语法编写各种分支逻辑,这使得我们可以在 action 中进行流程控制,而不是将 control 流程移到其他位置(比如 Reducer和Effect 中)
缓存数据
Thunk 还可以配合缓存机制,优化应用程序性能。在 thunk 函数中应用缓存机制,可以使得 thunk 函数不必重新获取数据,同时返回可用的缓存副本,此时只要更新 State 即可,从而减少不必要的网络查询。
如何使用 Redux-thunk
在使用 Redux-thunk 时,我们需要首先安装它:
npm install redux-thunk
然后,在 Redux store 定义时将其作为 applyMiddleware 的参数传入:
import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; const store = createStore(rootReducer, applyMiddleware(thunk));
然后就可以在 actions 中使用了
总结
Redux-thunk 是 Redux 生态中一个很有用的中间件,可以让 action 返回一个函数并且在异步操作完成后 dispatch action。Thunk 还具有注入依赖和控制流程的能力,同时可以配合缓存机制提升应用程序性能。在使用 Redux-thunk 的时候,只需要先安装并在 store 中 applayMiddleware 使用即可。
到此,作为一个前端开发人员, 你应该已经能够掌握 Redux-thunk 的基本使用方法,同时还应该能够利用它来提高代码的可读性和维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cb4a715ad90b6d041fb2b1