开发者问题收集

React.js 挂载时如何获取 api

2022-06-18
520

我试图在我的页面上显示 Nfts,但它给出了错误,如 Uncaught TypeError:无法读取未定义的属性(读取“map”)。所以我的 nfts 变量是一个数组,但仍然无法映射。这是我的组件:

import React, { useState, useEffect } from "react";
import { Container, Row, Col } from 'react-bootstrap';
import axios from 'axios';
import { Link } from "react-router-dom";

const Nfts = ({ walletAddress }) => {
    const sender = "abc";
    const apikey = "def";
    const [nfts, setNfts] = useState();
    const getNftData = () => {
        axios.get(``)
            .then(output => {
                setNfts(output.data.result)
        })
    }
    useEffect(() => {
        getNftData();
    }, []);
    return (
        <section className="my-nfts">
            <Container>
                <Row>
                    {nfts == '' ?
                        <><div className='mynft-title'>My NFTs</div>
                            <div className="empty-nft">There is no NFT to display</div></> : (
                            <>
                                {nfts.map((nft, index) => {
                                    if (nft.from == sender && nft.to == walletAddress) {
                                        <Col xs={12} md={12} lg={4}>
                                            <div key={index}>{nft}</div>
                                        </Col>

                                    }
                                })}
                            </>
                        )}
                </Row>
            </Container>
        </section>
    );
}

export default Nfts;

所以我相信它在页面加载时第一次不会呈现。但我可能是错的。你认为我做错了什么?谢谢..

2个回答

只需为 nfts 状态提供一个空数组作为初始值 例如

const [nfts, setNfts] = useState([]);

在 HTML 中使用条件语句,如果 nfts 仍未定义则不使用 map 方法 例如

nfts && nfts.map(() => { ... } )

此外,我注意到 API URL 为空。(我不确定您是不是因为不想在问题中显示 API URL 而这么说,或者您遗漏了它)。

Mina
2022-06-18

我建议你使用更简洁的语法

nfts?.map((item) => { ...item } )
Meet Majevadiya
2022-06-18