Получение onBeforeLift PersistGate для вызова другого создателя действий

У меня есть базовая настройка Redux-Persist моего приложения React Native с использованием PersistGate, чтобы проверить, все ли учетные данные все еще хороши. Если они не годятся, он очищает и сбрасывает магазин. То, что я хочу сделать, это назвать действие, если учетные данные хороши. Но когда я отправляю действие, я получаю ошибку "fetchData is notfined".

import React from 'react'
import { AppRegistry, View } from 'react-native'
import { Provider } from 'react-redux'
import Application from './src/containers/gen/Application'
import rootReducer from './src/reducers'
import { createStore, applyMiddleware } from 'redux'
import { persistStore, persistCombineReducers } from 'redux-persist'
import { PersistGate } from 'redux-persist/es/integration/react'
import reduxReset from 'redux-reset'
import storage from 'redux-persist/es/storage'
import {fetchData} from './src/actions/auth'
import { default as thunk } from 'redux-thunk'

const config = {
  key: 'root',
  storage
}

const reducer = persistCombineReducers(config, rootReducer)

function configureStore () {
  let store = createStore(reducer,
    applyMiddleware(thunk),
    reduxReset()
  )
  let persistor = persistStore(store)
  return { persistor, store }
}

const { persistor, store } = configureStore()

export default class App extends React.Component {
  _serverSync(store) {
    const state = store.getState()

    const uid = state.reducers.auth.credentials.uid
    const client = state.reducers.auth.credentials.client
    const access_token = state.reducers.auth.credentials['access-token']

    if (!uid && !client && !access_token) return

    fetch('https://url/api/v1/auth/validate_token?uid=' + uid + '&client=' + client + '&access-token=' + access_token)
      .then( (response) => {
        if(!response.ok) {
          persistor.purge()
          store.dispatch({ type: 'RESET' })
        } else {
          store.dispatch(fetchData(state.reducers.auth.credentials))
        }
      })
  }

  render () {
    return (
      <Provider store={store}>
        <PersistGate
          persistor={persistor}
          onBeforeLift={() => this._serverSync(store)}
          >
          <View style={{flex: 1}}>
            <Application />
          </View>
        </PersistGate>
      </Provider>
    )
  }
}

Я чувствую, что это, вероятно, вопрос новичка, так как доступ к функции, кажется, то, что я должен сделать. Стоит отметить, что создатель действий fetchData прекрасно работает при использовании внутри приложения.

Вот откуда я экспортирую fetchData (внутри 'src/actions/auth'):

export const fetchData = (credentials, _id, admin) => {
  return (dispatch) => {
    fetch('https://url.com/mobile/users/'+ _id.toString() +'/initialize', {
      method: 'GET',
      headers: credentials
    }).then((response) => {
      if (response.status === 200) {
        return (dispatch(storeData(response, admin)))
      } else {
        response.json().then((body) => {
          console.log(body)
          return (dispatch(loginErrors(body.error + ' ' + body.exception)))
        })
      }
    })
  }
}

0 ответов

Другие вопросы по тегам