React + Firebase空数组

问题描述 投票:1回答:1

我正在尝试将我的Firebase数据库(我有3个)中的项目渲染到我的React组件页面,并且遇到了一些困难。

var config = {
  // ...
};

firebase.initializeApp(config);

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: []
    }
  }

  componentWillMount() {
    var ref = firebase.database().ref("items");
    this.bindAsArray(ref, "items");
  }

  render() {
    return (
      <div>
        { this.state.items.map(function (item, i) {
          return (
            <h1 className="white">Item</h1>
          )
        }) }
      </div>
    );
  }
}

reactMixin(App.prototype, ReactFireMixin);

export default App;

我这样做是否正确,我不应该看到三个重复的<h1>元素?

任何帮助表示赞赏。提前致谢!

更新:

JSbin示例:http://jsbin.com/xodobohexi/edit?html,js,console,output

reactjs firebase firebase-realtime-database reactfire
1个回答
0
投票

如果你想使用ReactFire,你需要开始使用它作为mixin,正如@jacobawenger所解释的那样。如果您想在没有ReactFire的情况下渲染它,您可以执行以下操作:

export default class App extends Component {
  constructor() {
    super();
    this.state = {
      items: []
    }
  }

  componentWillMount() {
    var ref = firebase.database().ref("items");
    ref.once('value').then(snap=>{
      if(snap.val()!==null){
        let items=Object.keys(snap.val()).map(item=> return snap.val([item])
        this.setState({items})
      }
    })
  }

  render() {
    const {items} = this.state;
    return (
      <div>
        {items.map((item, i) => { return <h1 key={i}>{item}</h1> }) }
      </div>
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.