无法在接收Firebase DB数据后调度Redux动作
问题描述:
我正在使用反应原生应用程序从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)
}
答
我得到这个想通了。事实证明,当我导入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)
)
资本不会有所作为,你的错误可能是实际别的 – DonutReply
感谢您指出了这一点。你是对的。我当时使用'thunk'。我会更新答案。 – Rodiwa