【发布时间】:2018-09-21 14:47:23
【问题描述】:
我正在尝试将一组数据从实时数据库输出到 html 元素中,我从服务器获取数据并使用 setState 保存数据没有问题。我有一个来自功能组件的自定义 HTML 对象,它将输出道具,但我无法映射对象和内部对象。
下面是负责从数据库中拉取数据的代码:
componentDidMount() {
axios.get('./tasks.json')
.then(response => {
const fetchedTasks = [];
for (let key in response.data) {
fetchedTasks.push({
...response.data[key],
key: key
});
}
this.setState((prevState, props) => {
return {
taskList: fetchedTasks
}
} )
})
.catch(error => console.log(error));
}
这是我从数据库中提取的数据。我希望能够根据其名称、ID 等显示每个项目。 这是从服务器导出的 JSON 数据,这是通过 axios.get call 'Past.js' 复制到我的类组件的状态
{
"tasks" : {
"09182018" : {
"-LMgzJGM78f0BHbPf8cc" : {
"hours" : 0,
"id" : "2018-09-18T14:02:25.022Z",
"minutes" : 0,
"name" : "sadflkjdsalkf",
"seconds" : 2,
"start" : "2018-09-18T14:02:22.508Z"
},
"-LMgzaEYe0tcCjpxOuPU" : {
"hours" : 0,
"id" : "2018-09-18T14:03:38.635Z",
"minutes" : 0,
"name" : "safd",
"seconds" : 2,
"start" : "2018-09-18T14:03:36.353Z"
}
},
"09192018" : {
"-LMm7EoPnNdQLrZ5Rg62" : {
"hours" : 0,
"id" : "2018-09-19T13:59:31.361Z",
"minutes" : 0,
"name" : "sadf",
"seconds" : 2,
"start" : "2018-09-19T13:59:29.281Z",
"user" : "placeholder"
}
},
"09212018" : {
"-LMve6ihcRX_uZfvBcaC" : {
"hours" : 0,
"id" : "2018-09-21T10:24:06.504Z",
"minutes" : 0,
"name" : "sadfsd",
"seconds" : 2,
"start" : "2018-09-21T10:24:03.841Z",
"user" : "placeholder"
},
"-LMvnBBAWaHaBiGW5VMK" : {
"hours" : 0,
"id" : "2018-09-21T11:03:44.420Z",
"minutes" : 0,
"name" : "hello",
"seconds" : 14,
"start" : "2018-09-21T11:03:29.802Z",
"user" : "placeholder"
}
}
}
}
我试图在状态上运行 .map() 调用,但没有成功,映射嵌套项会抛出“array.map 不是函数”。这是我到目前为止的代码:
render() {
let outPutItems = [];
if (this.state.loading === false) {
outPutItems = this.state.taskList.map(array => array.map(item => {
<CompleteTask
id={item.id}
taskName={item.name}/>
})
)}
return (
<div className="Past">
<h1>Past Tasks</h1>
{outPutItems}
<button onClick={this.collectTasks}>Log the TaskList!</button>
</div>
);
}
-更新
前三个是我能够在反应中使用的,底部是使用虚拟数据,是我希望从上面的 JSON 数据中得到的输出,它已应用于来自 firebase 服务器的状态。
top output with map method, bottom using placeholder data from state
我可以用这段代码输出前三个,上面的所有其他代码都是一样的:
{this.state.taskList.map((outer, index) => (
<CompleteTask
taskName={outer.key}
/>
) )
}
【问题讨论】:
-
我在这里看不到任何嵌套数组(但您最好发布原始响应正文...它比这更容易阅读)。不就是
this.state.taskList.map(item => <CompleteTask ... -
抱歉,已经更改了一些描述,我遇到的主要问题是任务对象是从具有唯一对象 ID 的 Firebase 中提取的,例如:LMm7EoPnNdQLrZ5Rg62。我不确定如何访问该对象内的条目。
-
啊,好吧!好吧,您需要首先提取按日期分组的任务(我假设):
Object.keys(this.state.taskList).map(dateGroup => /*this.state.taskList[dateGroup] */)以获取所有任务,然后Object.keys()获取 Firebase ID。或者,您可以直接使用Object.entries(),它返回带有键/值对的嵌套数组。
标签: javascript reactjs firebase firebase-realtime-database react-state-management