【发布时间】:2020-04-16 14:45:11
【问题描述】:
我有这个 sn-p 代码,我想做的是从 api 端点获取数据并查看 React 组件中的所有数据。我正在使用 useSelector 读取状态并使用 setState 来设置该特定组件中的状态。当我尝试映射数组时,它说映射未定义。这有什么问题?
import React, {useState} from 'react';
import ContainerHeader from 'components/ContainerHeader/index';
import IntlMessages from "../../../util/IntlMessages";
import {useDispatch, useSelector} from "react-redux";
import TextField from "@material-ui/core/TextField";
import {getUsersFromBackEnd} from "../../../actions";
const UsersPage = ({match}) => {
const dispatch = useDispatch();
const allUsers = () => dispatch(getUsersFromBackEnd());
const [users, setUsers] = useState(allUsers);
const getUsers = useSelector(state => state.users);
console.log('users array: ', getUsers.users)
return (
<div className="app-wrapper">
<ContainerHeader match={match} title={<IntlMessages id="pages.users"/>}/>
<div className="d-flex justify-content-center">
<h1>Users Page</h1>
<ul>
</ul>
</div>
</div>
)
}
export default UsersPage;
我的日志返回是这样的:
{users: Array(2)}
users: Array(2)
0: {id: 1, name: "Admin", email: "admin@admin.com",
email_verified_at: null, approved: 1, …}
1: {id: 2, name: "User 2", email: "mail@mail.com",
email_verified_at: null, approved: 0, …}
length: 2
..........
我的端点返回这个:
{
"result": true,
"users": [
{
"id": 1,
"name": "Admin",
"email": "admin@admin.com",
"email_verified_at": null,
"approved": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null,
"roles": [
{
"id": 1,
"title": "Admin",
"created_at": null,
"updated_at": null,
"deleted_at": null,
"pivot": {
"user_id": 1,
"role_id": 1
}
}
]
},
{
"id": 2,
"name": "User 2",
"email": "mail@mail.com",
"email_verified_at": null,
"approved": 0,
"created_at": "2020-04-16 07:35:48",
"updated_at": "2020-04-16 07:35:48",
"deleted_at": null,
"roles": [
{
"id": 2,
"title": "User",
"created_at": null,
"updated_at": null,
"deleted_at": null,
"pivot": {
"user_id": 2,
"role_id": 2
}
}
]
}
]
}
【问题讨论】:
-
由于您是通过 api 获取
allUsers,这意味着它是一个异步调用。所以这样做:const allUsers = async () => await dispatch(getUsersFromBackEnd()); -
同样的结果也与异步
-
在
useState中使用前还需要调用allUsers() -
我已经完成了,但结果相同!数组存在我可以在日志中看到所有内容,但是当我尝试在其上应用地图时它失败了!
标签: reactjs redux react-redux setstate