Redux Thunk Firebase - 获取数组
Redux Thunk Firebase - fetch arrays
我正在使用 redux、react-redux、redux-thunk 构建一个 React Native 应用程序,并使用 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() 方法没有 return Promise,那么我该如何解决呢?
使用 redux-thunk 和非规范化的 firebase 数据库获取数据的最佳模式是什么?
谢谢大家
将通常放在 .then()
中的代码放入 .on()
回调中。这样,每次刷新数据时,都会调度您的 setPost
操作。
例如:
...
postRef.on('value', snap => {
var newPost = {
title: snap.val().title,
user: snap.val().user
}
dispatch(setPost(newPost))
});
您可能希望保留该数据库引用,以便以后 stop listening。
我正在使用 redux、react-redux、redux-thunk 构建一个 React Native 应用程序,并使用 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() 方法没有 return Promise,那么我该如何解决呢? 使用 redux-thunk 和非规范化的 firebase 数据库获取数据的最佳模式是什么?
谢谢大家
将通常放在 .then()
中的代码放入 .on()
回调中。这样,每次刷新数据时,都会调度您的 setPost
操作。
例如:
...
postRef.on('value', snap => {
var newPost = {
title: snap.val().title,
user: snap.val().user
}
dispatch(setPost(newPost))
});
您可能希望保留该数据库引用,以便以后 stop listening。