尝试获取 Postman API 并使用 map 函数显示数组的内容。它说数组未定义

Posted

技术标签:

【中文标题】尝试获取 Postman API 并使用 map 函数显示数组的内容。它说数组未定义【英文标题】:Trying to fetch a Postman API and displaying the contents of the array using map function. It says the array is undefined 【发布时间】:2021-01-27 01:10:36 【问题描述】:

API 获取一个包含对象数组的 json 对象。这个数组被取出来,作为props(props.users)传递给下面的组件。

import React,  Component  from 'react';

import UserCard from '../components/UserCard';

export class Userscreen extends Component 

    constructor(props) 
        super(props);
        this.state = users: [];
    

    componentWillMount() 
        const people =  this.props.users;
        this.setState(users: people);
    

    render() 

        let UserList = this.state.users.map(user => 
            <UserCard name=user.firstName+' '+user.lastName id=user.id email=user.email dob=user.dob />
        );
        return (
            <div>
                UserList                
            </div>
        )
    


export default Userscreen

【问题讨论】:

【参考方案1】:

不要将 props 复制到 state。直接使用道具即可:

export class Userscreen extends Component 
    render() 
        let UserList = this.props.users.map(user => 
        // −−−−−−−−−−−−−−−−−^^^^^
            <UserCard name=user.firstName+' '+user.lastName id=user.id email=user.email dob=user.dob />
        );
        return (
            <div>
                UserList                
            </div>
        );
    

道具基本上是父母控制的状态。通过将它们复制到状态,您将捕获 first props.users 调用您的组件,然后忽略父级之后所做的任何更新。这就是列表为空的原因:据推测,您的父组件在 ajax 调用运行时开始使用空的用户列表创建 Userscreen,然后在 ajax 调用完成时更新它。


旁注:由于该组件现在是纯组件,您可以考虑将其转换为无状态功能组件:

export function Userscreen(props) 
    let UserList = props.users.map(user => 
    // −−−−−−−−−−−−^^^^^^^^^^^
        <UserCard name=user.firstName+' '+user.lastName id=user.id email=user.email dob=user.dob />
    );
    return (
        <div>
            UserList                
        </div>
    );

或者解构:

export function Userscreen(users) 
    let UserList = users.map((firstName, lastName, id, email, dob) => 
        <UserCard name=firstName + ' ' + lastName id=id email=email dob=dob />
    );
    return (
        <div>
            UserList                
        </div>
    );

【讨论】:

我试过这个解决方案,仍然是同样的错误。如果我尝试在通过 console.log(props.users) 映射之前记录 users.props;它可以很好地打印对象。只是映射有问题。 @Dungeonmaster - 这个答案纠正了问题中显示的代码的问题,并且如果父级在拥有用户列表时重新渲染,则绝对有效。如果它不起作用,则表明 A)您没有像上面那样实现它(对不起 :-)),或者 B)父组件存在单独的问题。请仔细检查您是否正确实现了上述内容,如果是父组件问题,请发布有关父组件的新问题。在该问题中,请包含一个 runnable 示例; here's how to do one.

以上是关于尝试获取 Postman API 并使用 map 函数显示数组的内容。它说数组未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Postman 客户端调用 Twitter API

Api 调用适用于从 Postman 获取的令牌,但不适用于通过 nodejs 应用程序获取的令牌

Postman 收到简单的 ASP.NET Core Web API 的 404 错误

尝试通过 Postman 调用 OWIN OAuth 安全 Web Api 来获取 JWT 时出现“错误”:“unsupported_grant_type”

如何在 Postman 中使用 GitHub API

设置 Postman 环境并调用 API