【问题标题】:Unable to dispatch redux action after receiving firebase DB data接收到 firebase 数据库数据后无法调度 redux 操作
【发布时间】:2018-04-16 17:25:41
【问题描述】:

我正在使用 react native 应用程序从 firebase 数据库中获取数据。这个想法是在从 FirebaseDB 接收到数据后立即调度一个操作来初始化store.appState。问题是收到数据时不会触发调度。我错过了什么?

我正在使用 redux-thunk 中间件。

// 数据库.js

import * as firebase from 'firebase'

const config = {
  apiKey: "...",
  authDomain: "...",
  databaseURL: "...",
  projectId: "...",
  storageBucket: "...",
  messagingSenderId: "..."
}

const Database = firebase
  .initializeApp(config)
  .database()
  .ref()

export default Database

//actions.js

import database from 'database'

const setInitDataFromFirebase = data => {
  return ({
    type: SET_DATA_INIT,
    payload: {
      data
    }
  })
}

export const loadAction = () => {
  return dispatch => {
    Database.once('value', snapshot=>{
      console.log(snapshot.val()) // i get the log with correct data
      dispatch(setInitDataFromFirebase(snapshot.val())) // this is not dispatched
    })
  }
}

// 容器.js

const View = (appState, loadData) => {
     if (!appState) loadData() // appState is null initially
}

const matStateToProps (...) // passes appState
const mapDispatchToProps (...) // passes loadData

export default connect(mapStateToProps, mapDispatchToProps)(View)
}

【问题讨论】:

    标签: firebase-realtime-database redux


    【解决方案1】:

    我想通了。原来我在导入 redux-thunk 时犯了一个非常基本的错字。我应该做的

    import ReduxThunk from 'redux-thunk'
    const store = createStore(
      RootReducer,
      applyMiddleware(ReduxThunk, logger)
    )
    

    我做错的是

    import thunk from 'redux-thunk'
    const store = createStore(
      RootReducer,
      applyMiddleware(thunk, logger)
    )
    

    【讨论】:

    • 大写不会有影响,你的错误可能实际上是别的东西
    • 感谢您指出这一点。你说得对。我当时用的是“thunk”。我会更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2020-10-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多