javascript - React Redux 从 Api 获取数据是 Null
问题描述
我正在使用 react 和 redux 从 api 获取数据,但是当我尝试在视图中检索数据时,出现错误:
类型错误:catData 未定义
在我看来,我很难从我的 api 中检索数据,尽管事实上一切都很好。任何关于我做错了什么的建议/关于如何从减速器中检索数据的建议都将受到高度赞赏。
我的观点看起来像这样
import React, { useState, useEffect } from "react";
import { connect} from "react-redux";
// @material-ui/core components
import Loader from 'react-loader-spinner'
import { fetchCategories } from "../../../actions/data"
const mapStateToProps = state => {
return {
catData: state.categories
}
}
const mapDispatchToProps = dispatch => {
return {
fetchCategories: () => dispatch(fetchCategories())
}
}
function CategoriesSection({ catData,fetchCategories}) {
useEffect(() => {
fetchCategories();
}, []);
return catData.loading ? (
<div xs={12} sm={10} md={10} lg={10} style={{marginTop: 10}} >
<Loader
type="Puff"
color="red"
height={200}
width={200}
style={{ display: "flex",
justifyContent: "center",
alignItems: "center" }}
/>
</div>
)
: catData.error ? (
<h2> {catData.error} </h2>
): (
<div>
<div className={classes.title} justify="center">
<h2 className={classes.title}>Our Categories</h2>
</div>
<div>
{
catData && catData.cat
}
</div>
</div>
)
}
export default connect(mapStateToProps, mapDispatchToProps)(CategoriesSection)
我的减速器看起来像这样:
import {
CATEGORIES_FETCH_REQUEST,
CATEGORIES_SUCCESS,
CATEGORIES_FAIL
} from "../actions/types";
const initialState = {
loading: false,
categories: [],
businesses: [],
error: ''
}
export default function(state = initialState, action) {
switch(action.type) {
case CATEGORIES_FETCH_REQUEST:
return {
...state,
loading: true
};
case CATEGORIES_SUCCESS:
return {
...state,
loading: false,
categories: action.payload
};
case CATEGORIES_FAIL:
return {
loading: false,
categories: null,
error: action.payload
};
default:
return state;
}
}
我的行为看起来像这样:
import axios from 'axios';
import {
CATEGORIES_SUCCESS,
CATEGORIES_FAIL,
CATEGORIES_FETCH_REQUEST,
} from "./types";
export const fetchCategories = () => {
return (dispatch) => {
dispatch(fetchCategoryRequest)
axios.get('https://api.xxxxxxx.com/api/v1/categories/')
.then(response => {
const categories = response.data
dispatch(fetchCategorySuccess(categories))
})
.catch(error => {
const err = error.message
dispatch(fetchCategoryFailure(err))
})
}
}
const fetchCategoryRequest = () => {
return {
type: CATEGORIES_FETCH_REQUEST
}
}
const fetchCategorySuccess = categories => {
return {
type: CATEGORIES_SUCCESS,
payload: categories
}
}
const fetchCategoryFailure = err => {
return {
type: CATEGORIES_FAIL,
payload: err
}
}
解决方案
推荐阅读
- java - java.lang.NumberFormatException: null - 无法读取输入类型
- flutter - 未处理的异常:WebSocketException:与“http://10.5.11.88:7777/socketcluster/#”的连接未升级到 websocket
- php - .htaccess 阻止用户访问某个目录,但通过 jquery ajax 使用该目录中的文件
- python - OpenCV 将图像读取为 3 通道图像,而 PIL 将相同图像读取为 1 通道图像
- flutter - Flutter:无法让 SingleChildScrollView 中的容器垂直扩展
- php - HTML 表单到 CSV 并使用 PHP 下载 CSV
- javascript - 从对象内的函数数组中的回调函数访问正确的“this”
- xml - 如何一次获取 DOMDocument.Validate 中的所有验证错误?
- c# - 如何避免由于独特的约束而标记为未更改并稍后修改?
- azure - 如何使用逻辑应用修改 Azure 分析服务角色?