我正在构建一个带有 redux、react-redux、redux-thunk 的 react 本机应用程序,并使用 firebase 作为后端。
我的数据库是非规范化的,所以我必须在 firebase 引用中获取键,对于每个键,我需要从另一个引用中获取数据。
使用 firebase.once('value')
我得到了这样的东西:
const fetchPosts = ( uid ) => {
return ( dispatch ) => {
dispatch(postsIsFetching())
const userPostsRef = firebase.database().ref('users/' + uid + '/myposts')
var keys = []
//
userPostsRef.once('value').then(snap => {
snap.forEach(post => keys.push(post.key))
}).then(() => {
keys.forEach(key => {
const postRef = firebase.database().ref('posts/' + key )
postRef.once('value').then(snap => {
var newPost = {
title: snap.val().title,
user: snap.val().user
}
dispatch(setPost(newPost))
})
})
}
}
但这不是实时更新,导致 .once() 方法只读取一次数据。.on() 方法不返回 Promise,那么我该如何解决呢?使用 redux-thunk 和非规范化的 Firebase 数据库获取数据的最佳模式是什么?
谢谢你们
把你通常会把在代码.then()
里面.on()
回调。这样,每次数据刷新时,您的setPost
操作都会被分派。
例如:
...
postRef.on('value', snap => {
var newPost = {
title: snap.val().title,
user: snap.val().user
}
dispatch(setPost(newPost))
});
您可能希望保留该数据库引用,以便以后可以停止收听。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句