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'))
      })
}

results matching ""

    No results matching ""