为什么我的状态在 ReactJS 中被映射了太多次?

Why is my state getting mapped one too many times in ReactJS?

您好,我正在尝试 map 我从 Firebase 获取的数据,放入一排卡片中。但是因为我在 constructor 中定义了状态,所以一开始返回的一张卡片没有任何值。我该怎么做才能避免返回第一个空卡片组件?提前致谢。
(卡片组件是我导入的带有缩略图的组件)

class  List extends Component {
      constructor(props){
        super(props)

        this.db = firebase.database().ref().child('app').child('cards');

        this.state = {
            cards: [
              {
                id: "",
                cardDesc: "",
                cardPrice: "",
                cardHeading: "",
              }
            ]
          }
        }

      componentWillMount (){
        const previousCards = this.state.cards

        this.db.on('child_added', snap => {
          previousCards.push ({
            id: snap.key,
            cardDesc: snap.val().cardDesc,
            cardPrice: snap.val().cardPrice,
            cardHeading: snap.val().cardHeading,
          })
          this.setState ({
            cards: previousCards
          })
        })
      }

      render(){
        return(
          <div className='list'>
          <Row>
          { this.state.cards.map((card) => {
            return(<Card cardHeading={card.cardHeading} cardDesc={card.cardDesc}
               cardPrice={card.cardPrice} key={card.id} />)
                })
          }
          </Row>
          </div>
        )
      }
    }

    export default List

无法在数据返回之前延迟渲染方法的调用,因此您可以检查 cards.length <1 并且在数据返回之前不显示任何内容或显示加载屏幕.

您可以删除状态的初始设置并将渲染方法更改为

this.state.cards && this.state.cards.(your stuff)