|
redux-thunk Redux处理异步任务——异步数据流中间件: redux-thunk & action是一个函数,函数内部处理异步任务
使用了redux-thunk中间件以后,我们需要修改action redux-thunk的使用 安装 ,引入 npm install redux-thunk // 下载两个中间件, redux-thunk 处理异步,redux-logger 日志模块 // npm i redux-thunk redux-logger 导入 import { createStore, applyMiddleware } from 'redux'
import thunkMiddleware from 'redux-thunk'
import { createLogger } from 'redux-logger'
import { Provider } from 'react-redux'
import userReducer from "./redux/userReducer";
配置: const loggerMiddleware = createLogger()
const store = createStore(userReducer,applyMiddleware(
thunkMiddleware, // 使得action(或dispatch)可以是一个函数
loggerMiddleware // 一个很便捷的 middleware,用来打印 action 日志
));
组件中使用:和redux 的区别,注意是dspatch中的action是一个函数 import {connect} from 'react-redux'
import {userLoginAction} from "./../redux/actionCreatorThunk"
function Login(){
...
}
function mapStateToProps(state) {
return {
user:state.user
}
}
function mapDispatchToProps(dispatch) {
return {
userLogin:(userInput) => dispatch(userLoginAction(userInput))
}
}
export default connect(mapStateToProps,mapDispatchToProps)(Login);
组件中使用action const onFinish = (values) => {
//console.log('Success:', values);
// user,pwd,发送到服务器,进行验证
//aciton 中去进行数据的请求
this.props.userLogin(values).then((data)=>{
console.log("登录成功");
this.props.history.push('/index');
}).catch((data)=>{
console.log(data);
})
};
ActionCreatorThunk 有了redux-thunk以后,处理异步数据的action : 异步操作完成后,都要触发一个同步的action,由这个同步的action来完成该任务!!! thunk的action写法 // 创建action所需要数据
export function userLoginAction(userInput) {
//可以在这里进行异步处理
return (dispatch)=>{
// 在此处,就可以处理异步操作了
// 也就是,异步代码就可以放在此处执行了
return new Promise((resolve, reject)=> {
Axios.post(Api.user.UserLogin, userInput).then((res) => {
if (res.data.returnCode === 200) {
const action = {
type: actionType.USER_LOGIN,
data: {
user: res.data.data,
token: res.data.token
}
}
dispatch(action)
resolve(res.data);
} else {
reject("请求失败");
}
})
});
}
}
|
|
|