reactjs - 如何在发送 API 请求期间显示加载指示器
问题描述
我想在请求等待数据时显示加载指示器
我正在使用 axios 发送 http 请求
和 redux 作为状态管理
我试图定义一个加载对象,以便每当我调用一个动作时,将其设置为 true
,但当我获取数据时它不会变为 false
这是我尝试过的
const INITIAL_STATE ={
loading:false,
success:null,
msg:'',
obj:[]
}
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case SEND_PHONE:
return {...state,
success:action.payload.success,
msg:action.payload.msg,
obj:action.payload.obj
,loading:true};
default:
return state;
}
}
解决方案
一种方法是使用带有 redux-thunk ( https://github.com/reduxjs/redux-thunk ) 的异步操作,它可以让您在一个操作中分派多个时间
您的操作可能看起来像这样:
export function fetchSomething() {
return dispatch => {
dispatch({type:FETCH_PENDING})
someApi.getSomeStuff()
.then(response => {
dispatch({type:FETCH_SUCCESSFULL, payload: response.data.results})
return response.data.results
})
.catch(error => {
dispatch({type:FETCH_ERROR, payload: error})
})
}
}
然后你的减速器看起来像这样
const initialState = {
data: [],
loading: false,
error: null
}
function fetchSomethingReducer(state = initialState, action) {
switch(action.type) {
case FETCH_PENDING:
return {
...state,
loading: true,
error: null
}
case FETCH_SUCCESS:
return {
...state,
loading: false,
data: action.payload
}
case FETCH_ERROR:
return {
...state,
data: [],
loading: false,
error: action.payload
}
default:
return state
}
}
推荐阅读
- javascript - 使用钩子从 Firebase 实时数据库 ReactJs 更新数据
- macos - 在 macOS 上运行的服务无法访问附加卷上的文件
- c++ - LNK2001 带矢量功能
- python - 如何填充python中几条曲线之间的区域?
- formvalidation.io - formvalidation.io HTML5 验证器不工作
- c++ - 具有不匹配优化级别(-O3、-O2、-O1、-O0)的二进制文件是否会导致稳定性问题?
- api - CSRF 安全是否依赖于前端?
- javascript - 如何在点击时显示 Bootstrap 行?
- ios - _PFObjectIDFastHash64 崩溃 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
- f# - 如何在刺猬中定义一个生成特定长度列表的生成器?