reactjs - 如何在反应中正确地迭代或循环对象
问题描述
下面的代码从 Atlassian Storage API 查询记录。
withconsole.log(data)
将记录显示为对象对象。
,我可以在控制台console.log(data.first_name) and console.log(data.last_name)
中成功看到Lucy和Carrots的名字。
这是我的问题:
当我尝试遍历其他对象以按照下面的代码显示记录时。它显示错误
TypeError:无法读取 Object.App 未定义的属性“长度”
如果我删除projects.length 并尝试显示记录,它将显示错误
TypeError:无法读取未定义的属性“地图”
以下是我到目前为止的努力
import api, { route } from "@forge/api";
import ForgeUI, { render, Fragment, Text, IssuePanel, useProductContext, useState, Component, useEffect} from "@forge/ui";
import { storage} from '@forge/api';
const fetchData = async () => {
//const data = {first_name: 'Lucy', last_name: 'Carrots' };
const data = await storage.get('key1');
console.log(data);
console.log(data.first_name);
console.log(data.last_name);
};
const App = () => {
const [ projects ] = useState(fetchData);
fetchData();
return (
<Fragment>
<Text> Display Objects Records</Text>
{projects.length ? projects.map((i, v) => (
<Text key={v}>
<Text>
<Text>First Name: {v.first_name}</Text>
<Text>Last Name: {v.last_name}</Text>
</Text></Text>
)): <Text>No data stored yet...</Text>}
</Fragment>
);
};
export const run = render(
<IssuePanel>
<App />
</IssuePanel>
);
解决方案
我看到响应数据返回一个对象,所以你不需要使用array
with map
。
你应该在useEffect中调用API。
const App = () => {
const [projects, setProjects] = useState(null);
useEffect(() => {
const fetchData = async () => {
const data = await storage.get("key1");
setProjects(data);
};
fetchData();
}, []);
...
{
projects ? (
<Text key={v}>
<Text>
<Text>First Name: {projects.first_name}</Text>
<Text>Last Name: {projects.last_name}</Text>
</Text>
</Text>
) : (
<Text>No data stored yet...</Text>
);
}
...
}
推荐阅读
- python - Messed up my macOS system package with pip package
- angular - 如何检测间隔可观察开始请求的时间?
- go - Passing info from channel to channel while altering it in go
- matlab - Matlab:与 Windows C++ 可执行文件的接口
- python - 如何测试不正确的数据输入
- django - Django 只能将 str (不是“列表”)连接到 str
- python - 为什么python没有内置函数mean()?
- opencv - 在 OpenCV 中浏览视频非常消耗 CPU,为什么观看视频不那么密集?
- javascript - Javascript 需要两次点击来初始化我想要它做的事情
- multithreading - 我应该在 Clojure 中使用哪一个?去块还是线程?