从React中的状态数组渲染项目时出错

时间:2019-11-14 00:24:18

标签: javascript node.js reactjs ecmascript-6

在渲染功能中获取状态数据时遇到问题。 它工作正常并在我使用时返回数组

console.log(items)

但是尝试从数组中获取第一项会产生错误

console.log(items[0])

完整代码是:

import React from "react";
import StatsSection from "./../components/StatsSection";
import { db } from "./../util/database";

class IndexPage extends React.Component {

  constructor(props) {
    console.log(props)
    super(props);
    this.state = {};
  }

  componentDidMount() {

    var data = []
    db.collection('test')
      .get().then(snapshot => {
        snapshot.forEach(doc => {
          data.push(doc.data())
        })
      })

    this.setState({
      items: data
    });    
  }

  render() {
    const { items } = this.state
    console.log(items[0])


    return (

      <StatsSection
        color="white"
        size="medium"
        backgroundImage=""
        backgroundImageOpacity={1}
        items={[

          {
            title: "Following",
            stat: "123"
          },
          {
            title: "Followers",
            stat: "456k"
          },
          {
            title: "Likes",
            stat: "789"
          }
        ]}
      />
    );
  }
}

export default IndexPage;

我在哪里犯错?

2 个答案:

答案 0 :(得分:1)

您仅设置一项,因此items实际上只是一项,而items[0]则失败。

this.setState({
  items: data
});    

应位于.then()内,以便仅在所有项目都填充了.forEach()之后运行。

答案 1 :(得分:1)

像这样更新您的componentDidMount()

componentDidMount() {
  db.collection('test').get().then(snapshot => {
    var data = []
    snapshot.forEach(doc => {
      data.push(doc.data())
    })
    this.setState({ items: data })  
  })
}