Получение 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)))
})
}
})
}
}