gpt4 book ai didi

android - React-native Firebase database.Ref.on 只触发一次

转载 作者:太空狗 更新时间:2023-10-29 14:38:21 25 4
gpt4 key购买 nike

我正在Android联网设备(不是模拟器)上进行开发,并且启用了实时重新加载。每次我保存文件时,它都会在设备上重新加载我的应用程序——这正是我想要的。

我目前正在使用 Firebase 进行身份验证和实时数据库。为了检索记录的用户数据,我有一个调用 firebase.database()Redux 操作,如下所示:

// AppRedux.js
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'setCurrentUser':
return { ...state, currentUser: action.value }
break;
// { ... }
}
}

const store = createStore(reducer, applyMiddleware(thunkMiddleware))
export { store }

const setCurrentUser = (user) => {
return {
type: "setCurrentUser",
value: user
}
}

const watchUserData = () => {
return function(dispatch) {
const { currentUser } = firebase.auth()

if (currentUser) {
console.log(currentUser.uid) // I always have the right uid, so firebase.auth() always works
const ref = firebase.database().ref('users/' + currentUser.uid)

ref.on('value', (snapshot) => {
const user = snapshot.val()
console.log(user) // I get there onlye once !

dispatch(setCurrentUser(user))
}, (error) => {
console.log(error)
})
}
}
}
export { setCurrentUser, watchUserData }

我在这里称此操作为:

// Main.js

// { ... other imports}
import { watchUserData } from '../redux/AppRedux'


const mapStateToProps = (state) => {
return {
currentUser: state.currentUser
}
}
const mapDispatchToProps = (dispatch) => {
return {
watchUserData: () => dispatch(watchUserData())
}
}

class Main extends React.Component {
constructor(props) {
super(props)
}

componentWillMount() {
this.props.watchUserData()
}

render() {
const { currentUser } = this.props

return (
<View>
<Text>Hello { currentUser && currentUser.firstname }!</Text>
</View>
)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Main)

这段代码完美运行 - 但只有一次。当 Live Reload 触发时,它将不再起作用。

请注意 firebase.auth() 仍然有效并为我提供了正确的 uid,但是 firebase.database().ref('users/' + currentUser.uid).on('value') 将不再触发

我必须npm run android(等同于react-native run-android)让它再次启动。直到下一次Live Reload .

请注意,即使我注销并重新登录,它也不起作用。我仍然需要 npm run android 才能正常工作。

这是我的 package.json 以备不时之需

"dependencies": {
"react": "^16.3.2",
"react-native": "^0.55.3",
"react-native-firebase": "^4.3.6",
"react-native-google-signin": "^1.0.0-rc5",
"react-navigation": "^2.14.2",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-thunk": "^2.3.0"
}

我做错了什么吗?是因为我有一个免费的 Firebase 计划,而且我打了太多电话还是什么?

最佳答案

我认为它与多重调度有关,尝试:

dispatch(setCurrentUser(user), { allowMore: true })

您可以在 here 上阅读更多内容

关于android - React-native Firebase database.Ref.on 只触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com