我对React Native,redux等都很陌生,所以我希望你能提供帮助。基本上我有一个'时间表'我希望这能听取firebase上的任何更新。如果有新帖子,则会添加新帖子。
在我的家庭组件中,我调用以下操作:
componentDidMount() {
this.props.listFetched();
}
在我的行动中,我得到了快照并反转了#39;订购并发送' feed'我的减速机。
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 };
};
出于某种原因,如果我使用以下操作,它会自动刷新列表而不会手动执行。
export const listFetched = () => {
return (dispatch) => {
firebase.database().ref('/posts').orderByChild('timestamp')
.on('value', snapshot => {
dispatch({ type: LIST_FETCHED, payload: snapshot.val() });
})
};
};
非常感谢任何帮助。 感谢
答案 0 :(得分:0)
我会更担心第一个没有自动更新,因为你在firebase fetch中使用“on”而不是“once”,如果有的话,第二个动作正在执行它的工作,你调用它一次,然后只要firebase自动更新,“on”就会更新。如果你想控制它何时更新,用“一次”代替“开启”。