您现在的位置是:首页 >技术交流 >Redux中间件redux-thunk使用详解网站首页技术交流

Redux中间件redux-thunk使用详解

噢,我明白了 2023-06-08 20:00:02
简介Redux中间件redux-thunk使用详解

什么是redux-thunk?

redux-thunk主要用于处理reducer无法处理的异步
1.什么是异步?
同步:就是指前一个任务完成之后在继续执行下一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。
异步:每一个任务有一个或多个回调函数(callback),前一个任务结束后,不执行下一个任务,而是执行回调函数,后一个任务不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
2.异步通常会发生在比较复杂的功能使用中,例如:
axios请求接口数据接口数据返回则为异步
回调函数,当函数a作为参数传递给函数b,并在b函数完成后执行。
在我们使用redux时遇到异步不能解决,可以通过redux-thunk解决。
我们也可以利用redux-thunk对数据进行缓存,实现调取一次接口,多页面可以复用数据,
避免了多次调用接口的性能问题,可以提升页面加载速度。

3.redux-thunk的使用
(1).下载:

npm i redux-thunk

(2).引入:

impprt reduxThunk from 'redux-thunk';

(3).使用应用中间件的方法applyMiddleware()引入到reducer文件中

const reducer = combineReducers({areducer,breducer,creducer})
//combineReducers是对多页面reducer管理使用
//将大的reducer拆分,之后用combineReducers进行合并
const store = createStore(reducer,applyMiddleware(reduxThunk));

(4).在action文件中使用redux-thunk
正常的action是由一个函数返回的普通的js对象
而当我们使用thunk时,则是在函数的内部中返回一个函数,dispath作为形参传入。这样我们也能很好的了解到源码写的原理
源码原理:判断函数传入的参数是func还是普通的jis对象,从而帮助我们对异步进行处理

function getLidtaction(){
	return (dispatch)=>{
		axios(url:'xxxxxxx', method: 'get',).then((res)=>{
		//此次写异步处理
		dispatch(
		{
		type:'',
		payload: res.data
		})
		})
	}
}

(5).在对应的list.js文件中使用

useEffect(()=>{
	store.dispatch(getLidtaction())
},[])

注意:applyMiddleware()一定要使用不然将无法使用thunk,页面会报错

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。