反应本机Firebase列表刷新

反应本机Firebase列表刷新,firebase,react-native,redux,Firebase,React Native,Redux,我对React Native、redux等很陌生,希望你能帮我。基本上,我有一个“时间表”,我想听听firebase上的任何更新。如果有新的帖子,它会添加新帖子 在my home组件中,我调用以下操作: componentDidMount() { this.props.listFetched(); } 在我的操作中,我获取快照并对其进行“反向”排序,然后将“提要”发送到我的减速机 export const listFetched = () => { return (disp

我对React Native、redux等很陌生,希望你能帮我。基本上,我有一个“时间表”,我想听听firebase上的任何更新。如果有新的帖子,它会添加新帖子

在my home组件中,我调用以下操作:

componentDidMount() {
   this.props.listFetched();
}
在我的操作中,我获取快照并对其进行“反向”排序,然后将“提要”发送到我的减速机

export const listFetched = () => {
    return (dispatch) => {
    const feed = [];
    firebase.database().ref('/posts').orderByChild('timestamp').on('value', snapshot => {
        snapshot.forEach((listSnap) => {
            const list = listSnap.val()
            feed.push(list);
        });
        console.log("END FEED: " + JSON.stringify(feed));
        dispatch({ type: LIST_FETCHED, payload: feed });
    });
};
};
这将返回我通过的列表。如果我刷新设备,它会按预期显示所有内容,但当我添加新内容时,我需要再次手动刷新以使其显示

renderItem({ item }) {
    return <ListItem listItem={item} />
  }

  render() {
    return (
      <FlatList
        data={this.props.list}
        renderItem={this.renderItem}
      />
    );

const mapStateToProps = state => {
    const list = _.map(state.list, (val, uid) => {
    return { ...val, uid };
  });
    return { list };
};
任何帮助都将不胜感激。
谢谢

我更担心的是第一个操作没有自动更新,因为您在firebase获取中使用的是“开”而不是“一次”,如果有什么问题,第二个操作做得很好,您调用它一次,然后每当firebase自动更新时,“开”就会更新。如果您想控制它的更新时间,请使用“once”而不是“on”

export const listFetched = () => {
    return (dispatch) => {
        firebase.database().ref('/posts').orderByChild('timestamp')
            .on('value', snapshot => {
                dispatch({ type: LIST_FETCHED, payload: snapshot.val() });
            })
    };
};