redux-thunk Integration
getFirebase As Extra Argument
In order to get the most out of writing your thunks, make sure to set up your thunk middleware using its redux-thunk's withExtraArgument method like so:
createStore.js
import { applyMiddleware, compose, createStore } from 'redux';
import thunk from 'redux-thunk';
import { getFirebase } from 'react-redux-firebase'
import makeRootReducer from './reducers';
const fbConfig = {} // your firebase config
const middlewares = [
  thunk.withExtraArgument(getFirebase)
]
const store = createStore(
  makeRootReducer(),
  initialState,
  compose(
    applyMiddleware(...middlewares),
  )
);
App.js
import React from 'react'
import { Provider } from 'react-redux'
import firebase from 'firebase/app'
import 'firebase/auth'
import 'firebase/database'
import 'firebase/firestore' // make sure you add this for firestore
import { ReactReduxFirebaseProvider } from 'react-redux-firebase';
import { createFirestoreInstance } from 'redux-firestore';
import Home from './Home'
import createStore from './createStore'
import { firebase as fbConfig, reduxFirebase as rfConfig } from './config'
import './App.css'
// Initialize Firebase instance
firebase.initializeApp(fbConfig)
const initialState = window && window.__INITIAL_STATE__ // set initial state here
const store = createStore(initialState)
export default () => (
  <Provider store={store}>
    <ReactReduxFirebaseProvider
      firebase={firebase}
      config={rfConfig}
      dispatch={store.dispatch}
      createFirestoreInstance={createFirestoreInstance}>
      <Home />
    </ReactReduxFirebaseProvider>
  </Provider>
)
Example Thunk
function sendNotification(payload) {
  return {
    type: NOTIFICATION,
    payload
  }
}
export function addTodo(newTodo) {
  return (dispatch, getState, getFirebase) => {
    return getFirebase()
      .ref('todos')
      .push(newTodo)
      .then(() => {
        dispatch(sendNotification('Todo Added'))
      })
}