React错误:错误:对象作为React子级无效(找到:具有键{name}的对象),如果您打算呈现子对象的集合,

ttvkxqim  于 2023-03-09  发布在  React
关注(0)|答案(1)|浏览(86)

我有一个react原生应用程序,我尝试显示一些数组对象的名称。
这是一个简单的例子:

/* eslint-disable prettier/prettier */

import React, { useContext } from "react";
import { CategoryContext } from "../../../services/category/category.context";
import { CategoryList } from "./category.screen";
import { SafeArea } from "../../../components/utility/safe-area.component";
import { Spacer } from "../../../components/spacer/spacer.component";

import { Text } from "react-native-paper";

const data = [
    {
        name: "roofvogels",
    },
    {
        name: "parkieten",
    },
];

export const SubCategoryScreen = () => {    

    return (
        <SafeArea>
            <CategoryList
                data={data}
                renderItem={({ item }) => {
                    console.log("data", data);
                    return (
                        <>
                            <Spacer position="bottom" size="large">
                                <Text>{data}</Text>
                            </Spacer>
                        </>
                    );
                }}
                keyExtractor={(item) => item.id}
            />
        </SafeArea>
    );
};

类别列表:

export const CategoryList = styled(FlatList).attrs({
    contentContainerStyle: {
        padding: 16,
    },
})``;

如果我这么做

<Text>{data[0].name}</Text>

它的回报是屋顶狗的两倍。
所以我只想显示这两个名字:
屋顶福格尔公园
但如果我试一下,就会得到这个错误:

Error: Objects are not valid as a React child (found: object with keys {name}). If you meant to render a collection of children, use an array instead.

问:如何显示这两个名称?

oxf4rvwz

oxf4rvwz1#

data是一个数组,它不会直接转换为任何有意义的输出。您可以在该数组上使用.map,并从每个对象中输出所需的值。例如:

<Text>
  {data.map(d => d.name)}
</Text>

或者将每个元素放入其自己的<Text>元素中:

<Spacer position="bottom" size="large">
    {data.map(d => <Text>{d.name}</Text>)}
</Spacer>

无论您希望如何组织标记并设置其样式,关键是您不能直接输出数组或对象,而是可以循环访问该数组和/或输出该对象的特定值。

**编辑:**进一步检查......您已经将data传递给<CategoryList>组件。并且renderItem函数在语义上 * 暗示 * 它将 * 已经 * 被调用用于该数组中的每一项。是这样吗?回调中的item是什么?

你 * 可能 * 只是想从那里渲染对象?:

<Spacer position="bottom" size="large">
    <Text>{item.name}</Text>
</Spacer>

最终,这里的任何人都只能猜测。这取决于你是否理解和澄清你正在使用的数据结构和组件。根本问题仍然是一样的,你不能直接输出一个对象或数组,而是输出其中的值。* 你想在UI中输出哪个值 *,这取决于你。

相关问题