[英]Reactjs + Redux Unhandled Rejection (TypeError): Cannot read property 'data' of undefined
[英]error to read data with redux and reactJs
我的代码有问题,我使用 reactJs 和 redux。
我的错误: TypeError:demo.map 不是函数
我的行动:
// DEMO
export const demoFetchRequest = () => {
return {
type: DEMO_FETCH_REQUEST,
};
};
export const demoFetchSuccess = (demo) => {
return {
type: DEMO_FETCH_SUCCESS,
demo,
};
};
export const demoFetchError = (error) => {
return {
type: DEMO_FETCH_ERROR,
error,
};
};
我的减速机:
const initialState = {
loading: false,
demo: [],
error: null,
};
const demo = (state = initialState, action) => {
switch (action.type) {
case DEMO_FETCH_REQUEST:
return { ...state, loading: true };
case DEMO_FETCH_SUCCESS:
return { ...state, loading: false, demo: action.demo };
case DEMO_FETCH_ERROR:
return { ...state, loading: false, error: action.error };
default:
return state;
}
};
我的数据:
const demoCompletedData = [
{
id: 1,
marketId: "1111-1111-1111-1111",
title: "Autonomous car",
picture: "https://th?id=OIP.fdvfdvfdvfdvfd&pid=Api",
language: "English",
flag: "🇬🇧",
completed: true,
date: "22/01/2019 10:30",
rate: 9.1,
categories: {
de: 1,
sp: 2,
uk: 0,
fr: 1,
us: 4,
},
},
{
id: 2,
我的 componentDidMount :
componentDidMount() {
this.fetchDemo();
this.fetchUser();
}
我在前面取:
fetchDemo() {
this.props.demoFetchRequest();
const { marketId } = this.props.match.params;
axios.get(`/api/v1/passport-authenticate/market/${marketId}`)
.then((res) => { return res.data; })
.then(demo => this.props.demoFetchSuccess(demo))
.catch(error => this.props.demoFetchError(error));
}
我的回报:
const { demo } = this.props;
我的渲染
<h5>{demo.title}</h5>
<p>
Demo
{' '}
{demo.flag}
</p>
{demo.map((el) => {
return (
<div>
{Object.keys(el.categories).map((key) => {
return (
<p>
{key}
:
{el.categories[key]}
</p>
);
})}
</div>
);
})}
当我更改 Object.keys() 我有另一个错误TypeError: can't convert undefined to object
{Object.keys(demo).map((el) => {
return (
<div>
{Object.keys(el.categories).map((key) => {
return (
<p>
{key}
:
{el.categories[key]}
</p>
);
})}
</div>
);
})}
你能帮助我吗 ?
Map 是Array原型上的一个方法。
代码demo.map
仅在 demo 是数组时才有效,但在您的代码中它似乎是一个对象。
看起来您的意思是您的渲染方法略有不同,例如:
<h5>{demo.title}</h5>
<p>
Demo
{' '}
{demo.flag}
</p>
{demo.categories.map((el) => {
return (
<div>
<p>
{el}
</p>
</div>
);
})}
我也刚刚注意到你的类别是一个对象,而不是一个数组,所以你的渲染方法中处理类别的部分应该是这样的:
{demo.categories && Object.keys(demo.categories).map((el) => {
return (
<div>
<p>
{el.categories[key]}
</p>
</div>
);
})}
以上有几点需要注意:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.