2017-11-03 68 views
0

我正在使用反应原生应用程序从Firebase数据库获取数据。这个想法是一旦收到FirebaseDB的数据就立即发送一个动作来初始化store.appState。问题是收到数据时调度不会被触发。我错过了什么?无法在接收Firebase DB数据后调度Redux动作

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

// database.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 
    }) 
    } 
} 

// container.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) 
} 

回答

0

我得到这个想通了。事实证明,当我导入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) 
) 
+0

资本不会有所作为,你的错误可能是实际别的 – DonutReply

+0

感谢您指出了这一点。你是对的。我当时使用'thunk'。我会更新答案。 – Rodiwa