Я занимаюсь разработкой на Android , подключенном устройстве (не эмулятор), с Live Reload включено . Каждый раз, когда я сохраняю файл, он перезагружает мое приложение на устройстве, чего я и хочу.
В настоящее время я использую Firebase для аутентификации и базы данных в реальном времени.
Чтобы получить данные зарегистрированных пользователей, у меня есть действие Redux , которое вызывает firebase.database()
следующим образом:
// 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, и я делаю слишком много звонков или что-то в этом роде?