首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过API返回的数组反复映射子组件中的子组件。

通过API返回的数组反复映射子组件中的子组件。
EN

Stack Overflow用户
提问于 2020-10-04 14:24:15
回答 1查看 73关注 0票数 0

我在映射组件时遇到了问题。坦率地说,我对像上帝一样对代码的反应还不够经验。我会逐步把我的问题告诉你们,这样你们才能完全明白发生了什么。

附件1.1这是我的子组件,如您所见,当我从API中提取数组时,我使用React和useEffect挂钩来更新我的状态。没什么大不了的,这里没问题,只是普通的东西。

代码语言:javascript
复制
function Financeticker() {

const [crypto, setCrypto] = useState([]);
const classes = useStyles();

useEffect(() => {
    axios
        .get(
            `https://min-api.cryptocompare.com/data/top/totalvolfull?limit=10&tsym=USD&api_key=xxxxxxxxxxxxxxxxxxxx`
        )
        .then((resCrypto) => {
            console.log(resCrypto.data.Data);
            setCrypto(resCrypto.data.Data);
        })
        .catch((err) => {
            console.log(err);
        });
}, []);

附件1.2在我的子组件中充当子组件(胎儿组件,lol jk)的函数。如果令人困惑,您可能会在附件1.3中理解,但是API的响应基本上会返回一个由10个对象组成的数组。现在,我希望子组件呈现10次(使用.map),并从API (即{crypto.CoinInfo.FullName})中提取每个属性--问题是,我得到了一个错误,声明“无法读取未定义的属性”(FullName)。

代码语言:javascript
复制
const cryptoTicker = crypto.map(() => (
        <Grid item xs={12}>
            <Card className={classes.root}>
                <CardContent>
                    <Typography
                        className={classes.companyName}
                        color='textSecondary'
                        gutterBottom
                    >
                        {crypto.CoinInfo.FullName} <---- CANNOT READ PROPERTY "FULLNAME" OF UNDEFINED
                    </Typography>
                </CardContent>
            </Card>
        </Grid>
    ));

附件1.3是子组件的返回方法,它基本上调用了{cryptoTicker}组件中的Ticker函数。实际上,我们正在执行;步骤1:从API中提取数据。步骤2:在Ticker子组件中呈现子组件X次(在本例中为10次)。步骤2.1:从API返回的数组中提取数据,并将数据向下放置在子组件上。

代码语言:javascript
复制
    return <Ticker>{({ index }) => <>{cryptoTicker}</>}</Ticker>;
}

export default Financeticker;

我希望这个问题有足够的结构,以得到一个答案。感谢dev社区

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-04 15:18:36

好的,您正在对数组进行映射,但您从未指定该项。问题就在第一行:

代码语言:javascript
复制
const cryptoTicker = crypto.map(() => (

将此更改为

代码语言:javascript
复制
const cryptoTicker = crypto.map((item) => (

然后,您应该能够像这样显示名称:

代码语言:javascript
复制
    {item.CoinInfo.FullName}

完整代码:

代码语言:javascript
复制
const cryptoTicker = crypto.map((item) => (
        <Grid item xs={12}>
            <Card className={classes.root}>
                <CardContent>
                    <Typography
                        className={classes.companyName}
                        color='textSecondary'
                        gutterBottom
                    >
                        {item.CoinInfo.FullName} <---- CANNOT READ PROPERTY "FULLNAME" OF UNDEFINED
                    </Typography>
                </CardContent>
            </Card>
        </Grid>
    ));

我正在进行一个合理的猜测,但我认为您有一个问题,就是您没有加载状态,所以在第一个呈现时,crypto是一个空数组,但是您试图访问它的一个属性,因为它是一个对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64195831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档