我正在从我的redux项目调用API服务器,我想在其中提取数据.API中的数据格式如下所示:
const defaultData = {
categories: [
{
name: 'react',
path: 'react'
},
{
name: 'redux',
path: 'redux'
},
{
name: 'udacity',
path: 'udacity'
}
]
}
所以,在我的redux "动作" 中,我使用axios进行API调用。动作文件如下:
import axios from 'axios';
export const FETCH_CATEGORIES = 'fetch_categories';
let token;
if (!token)
token = localStorage.token = Math.random().toString(32).substr(-8);
const API = 'http://localhost:3001';
const headers = {
'Accept' : 'application/json',
'Authorization' : 'token'
}
export function fetchCategories() {
const URL = `${API}/categories`;
const request = axios.get(URL,{headers});
return dispatch => {
return request.then((data) => {
dispatch({
type : FETCH_CATEGORIES,
payload : data
})
})
}
}
我正在尝试在我的reducer中将API调用的结果保存在应用程序状态。类别的 Reducer 如下所示:
import _ from 'lodash';
import { FETCH_CATEGORIES } from '../actions/categories_action';
export default function(state={}, action) {
switch(action.type) {
case FETCH_CATEGORIES:
return {categories: {...state.categories, ...action.payload}};
default:
return state;
}
}
我正在使用 combineReducers()来合并我的索引文件中的所有reducer,如下所示:
import { combineReducers } from 'redux';
import PostReducer from './PostsReducer';
import CategoriesReducer from './CategoriesReducer';
const rootReducer = combineReducers({
loading: false,
posts: PostReducer,
categories: CategoriesReducer
});
export default rootReducer;
然后,在我的组件中,我试图显示来自州的数据。 所以,当我尝试在console.log中显示类别状态的值时,我会得到类似这样的内容,如下图所示:
但我只想要在我获得三个类别的类别属性(我想省略配置,标题,请求属性)。 我甚至尝试过类似: console.log(this.props.categories.data.categories),但这给了我一个未定义的值。 有人可以帮我这个吗?
答案 0 :(得分:0)
这是因为这一行{categories: {...state.categories, ...action.payload}};
将其更改为{categories: [...state.categories, ...action.payload.data.categories]};