首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux和数据获取

Redux和数据获取
EN

Stack Overflow用户
提问于 2021-08-17 12:41:08
回答 1查看 40关注 0票数 0

我是一个新手,Redux希望这里的人们能帮助我。我正在尝试进行2个api调用,如下所示。然而,似乎只运行了第一个api调用,所以我的rootCategories总是被设置为null。如何确保在更改状态之前也执行第二个api调用?

减速机

代码语言:javascript
复制
 export const categoryListReducer = (state = {categories: [], rootCategories: []}, action) => {
    switch (action.type) {
        case CATEGORY_LIST_REQUEST:
            return {loading: true, categories: [], rootCategories: []}
        case ROOT_CATEGORY_LIST_REQUEST:                
            return {loading: true, rootCategories: []}
        case CATEGORY_LIST_SUCCESS:
            return {...state, loading: false, categories: action.payload[0], rootCategories: action.payload[1]}
        case ROOT_CATEGORY_LIST_SUCCESS:
            return {...state, loading: false, rootCategories: action.payload} 
        case ROOT_CATEGORY_LIST_FAIL:
            return {loading: false, error: action.payload}       
        case CATEGORY_LIST_FAIL:
            return {loading: false, error: action.payload}
        default:
            return state
    }
}

动作

代码语言:javascript
复制
export const listCategories = (breadcrumbs) => async(dispatch) => {
  try {
    //fire off first reducer and load off empty array of products
    dispatch({
      type: CATEGORY_LIST_REQUEST
    })

    const apiEndPoint = breadcrumbs ?
      `/api/products/categories/${breadcrumbs}/` :
      '/api/products/categories/'

    const {
      data
    } = await axios(apiEndPoint)
    const {
      data2
    } = await axios('/api/products/categories/')

    dispatch({
      type: CATEGORY_LIST_SUCCESS,
      payload: [data, data2],
    })
  } catch (error) {
    console.log('error  ' + error)
    dispatch({
      type: CATEGORY_LIST_FAIL,
      payload: error.response && error.response.data.message ? error.response.data.message : error.response.data
    })
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-17 14:47:34

试试这个:

代码语言:javascript
复制
    if (data & data2) {
      dispatch({
        type: CATEGORY_LIST_SUCCESS,
        payload: [data, data2]
      })
    }

现在,只有在设置了两个const的情况下才会执行分派。

编辑:

我发现了这个post,关于Axios似乎有它自己的方式一次获取两个URL,如下所示:

代码语言:javascript
复制
import axios from 'axios';
 
let one = "https://api.storyblok.com/v1/cdn/stories/health?version=published&token=wANpEQEsMYGOwLxwXQ76Ggtt"
let two = "https://api.storyblok.com/v1/cdn/datasources/?token=wANpEQEsMYGOwLxwXQ76Ggtt"
 
const requestOne = axios.get(one);
const requestTwo = axios.get(two);
 
axios.all([requestOne, requestTwo]).then(axios.spread((...responses) => {
  const responseOne = responses[0]
  const responseTwo = responses[1]
  // use/access the results 
})).catch(errors => {
  // react on errors.
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68817551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档