我正在构建一个React-App,我在使用json/array
和.map()-function
时遇到了问题。我的服务器端json对象看起来像:
let jsonlist = [
{
Title: "first title",
Listofitems: ["Item 01", "Item 02", "Item 03"]
},
{
Title: "second title",
Listofitems: ["Item 04", "Item 05", "Item 06"]
}
]
我的客户端代码示例如下所示:
const [lists, setmylist] = useState([]);
const fetchFact = () => {
fetch("http://myapi:4000/getmyList")
.then((response) => response.json())
.then((data) => setmylist(data));
}
useEffect(() => {
fetchFact()
}, []);
return (
<div className='container'>
{lists.map(singleobject => {
var test = Object.entries(singleobject);
{ console.log(test) }
{ console.log(test[0][0]) }
<p>{test[0][0]}</p>
})}
</div>
);
如果我运行这个函数,得到{ console.log(test)}
:
[
[
"Title",
"first title"
],
[
"Listofitems",
[
"Item 01",
"Item 02",
"Item 03"
]
]
]
但是<p>{test[0][0]}</p>
没有显示出来。如果我改变
{lists.map(singleobject => {})}
变成了
{projects.map(singleproject => (
<p key={hereineedauniqueid}>Just checkin</p>
))}
Just checkin
显示了2次,就像我想要的,但我不知道如何访问我的值从json/array
.我需要改变json/array
的结构或我需要改变我的代码吗?
我想我需要使用{lists.map(singleobject => {})}
函数,因为我想为json/array
中的每个元素创建一个表和一个react-bootstrap/Modal
,并想在每个特定模态中显示json/array
中的值
谢谢你的帮助
4条答案
按热度按时间ukqbszuj1#
在下面的回调中,您混淆了普通JavaScript语法和JSX语法:
当把表达式插入React组件时(或者调试时,为了避免副作用),
{ expression }
的语法在JSX中很有用。但是这里您并不是在JSX的上下文中--您是在一个普通的JavaScript函数中。您的{}
表示 * 普通块 *。就像是
然后,如果您在JSX中
但是,这里不是在JSX中,您需要返回
<p>
来查看结果。但是,如果您想显示值包含的内容并迭代每个条目,请考虑返回一个.map
来覆盖对象的条目,而不是这样做。第一个
但是因为每个对象的键都是相同的,所以循环遍历条目似乎是多余的。直接引用
.Title
和Listofitems
会更容易。第一个
iyr7buue2#
我认为没有必要在每个对象上使用
Object.entries
,我会将它们保留为对象,并使用它们的key/value
对将内容呈现到DOM。例如,对于
jsonlist
:您可以简单地渲染第一个对象,如下所示:
如果要为列表中的每个对象构建一个组件,则可以在
lists.map(singleobject => {})
函数中将信息作为属性传递给组件。rdrgkggo3#
就像这样
你只需要知道箭头函数的基本知识
iszxjhcz4#
如果你把接口分解成更小的组件,你可能会更容易考虑这个问题。你知道
data
是一个对象数组,你必须对它进行map
操作,但是你的listofitems
也是一个数组,所以你也可以对它进行map
操作。因此,在容器
map
中,对从端点获取的数据进行处理,为每个对象生成一个新列表(带有一个标题和一个项目列表)。可以使用一个单独的List
组件来传递当前迭代对象。(您在问题中提到您想要一个表格,但由于我不知道您想要的表格格式,列表更容易生成,但原则仍然有效。请将List
和ListItem
替换为表行组件和表单元格组件)。在
List
组件中,您可以为title创建一个元素,并创建一个list元素,然后在其中使用ListItem
组件Map对象的项列表。注意,这样做需要给迭代的元素添加一个
key
属性(否则React会给予你一个警告),所以记住这一点,这个例子重构数据,给每个对象一个id
,并且为每个项目创建对象,每个对象都有自己的id。例如:
第一个