eth-thunk是一个基于Redux框架的中间件,它的感化是将异步操做封拆成一个函数,使得Redux的dispatch函数能够承受一个函数做为参数。如许,我们就能够在Redux中利用异步操做了。eth-thunk的根本用法如下:
```javascript
const thunkMiddleware = require('redux-thunk').default;
const store = createStore(reducer, applyMiddleware(thunkMiddleware));
function fetchUser(id) {
return (dispatch) => {
dispatch({type: 'FETCH_USER_REQUEST'});
return axios.get(`/users/${id}`)
.then(response => {
dispatch({type: 'FETCH_USER_SUCCESS', payload: response.data});
})
.catch(error => {
dispatch({type: 'FETCH_USER_FAILURE', payload: error});
});
};
}
store.dispatch(fetchUser(123));
```
在上面的代码中,我们利用了axios库来停止异步操做,fetchUser函数返回一个函数,那个函数承受dispatch函数做为参数,然后在异步操做完成后,再通过dispatch函数来更新Redux中的形态。
eththunk和eth-thunk的区别eththunk与eth-thunk是统一个工具,只是名称差别罢了。eththunk是ethers.js中的一个模块,它供给了与ethers.js集成的eth-thunk中间件的实现。eththunk的根本用法如下:
const {ethers} = require('ethers');
const {createMiddleware} = require('eth-thunk');
const provider = new ethers.providers.JsonRpcProvider();
const signer = provider.getSigner();
const middleware = createMiddleware({provider, signer});
const store = createStore(reducer, applyMiddleware(middleware));
store.dispatch(async (dispatch) => {
const balance = await provider.getBalance(signer.getAddress());
dispatch({type: 'SET_BALANCE', payload: balance});
});
在上面的代码中,我们利用ethers.js中的JsonRpcProvider来获取以太坊账户的余额,然后通过eth-thunk中间件来更新Redux中的形态。
eth-thunk的原理eth-thunk中间件的原理很简单,它就是一个函数,那个函数承受一个dispatch函数做为参数,然后返回一个函数,那个函数也承受一个dispatch函数做为参数,然后在异步操做完成后,再通过内层的dispatch函数来更新Redux中的形态。
eth-thunk中间件的源码如下:
export default function thunkMiddleware({dispatch, getState}) {
return (next) => (action) => {
if (typeof action === 'function') {
return action(dispatch, getState);
}
return next(action);
在上面的代码中,我们能够看到thunkMiddleware函数承受一个参数对象,那个对象包罗dispatch和getState函数。然后它返回一个函数,那个函数承受一个next函数做为参数,然后返回一个函数,那个函数承受一个action对象做为参数。
若是action对象是一个函数,那么就挪用那个函数,并传入dispatch和getState函数做为参数。不然,就挪用next函数,并传入action对象做为参数。
eth-thunk的优缺点eth-thunk中间件的长处是能够很便利地处置异步操做,使得我们能够在Redux中利用异步操做。并且,eth-thunk中间件的实现十分简单,只需要几行代码就能够实现。
eth-thunk中间件的缺点是可能会使代码变得复杂。若是我们在一个函数中嵌套多个异步操做,那么代码就会变得十分难以理解和维护。此外,eth-thunk中间件只适用于简单的异步操做,若是我们需要处置复杂的异步操做,那么可能需要利用其他的中间件,好比redux-saga。
eth-thunk是一个十分适用的中间件,它能够很便利地处置异步操做,使得我们能够在Redux中利用异步操做。eth-thunk的实现十分简单,只需要几行代码就能够实现。但是,eth-thunk中间件只适用于简单的异步操做,若是我们需要处置复杂的异步操做,那么可能需要利用其他的中间件,好比redux-saga。