Действия должны быть простыми объектами. Использовать пользовательское промежуточное ПО для асинхронных действий - PullRequest
0 голосов
/ 07 ноября 2018

Получение Actions must be plain objects. Use custom middleware for async action ошибки:

Редуктор индекса:

import { combineReducers } from 'redux';
import ProfileReducer from './profile_reducer'

const rootReducer = combineReducers({
  user: ProfileReducer
});

export default rootReducer;

Маршруты:

const createStoreWithMiddleware = applyMiddleware(promise)(createStore);

const Routers = () => (
  <Provider store={createStoreWithMiddleware(reducers)}>
    <BrowserRouter>
      <Switch>
        <Route path='/' component={Home} exact={true}/>
        <Route path='/login' component={Login} exact={true}/>
        <Route path='/register' component={Login} exact={true}/>
        <PrivateRoute path='/profile' component={Profile} exact={true}/>
      </Switch>
    </BrowserRouter>
  </Provider>
);

экспорт маршрутизаторов по умолчанию;

Я пытаюсь запустить два запроса вместе: один запрос на получение auth_token из бэкэнда и по ответу на первый запрос я запускаю другой запрос для получения информации профиля пользователя:

Действия в профиле:

import axios from 'axios';

import { getAuthToken } from '../actions/auth';

const ROOT_URL = 'http://localhost:3000/api/v1';
export const FETCH_PROFILE = 'fetch_profile';

export function getProfile(values, callback) {
  const url = `${ROOT_URL}/profile`;

  getAuthToken( (res) => {
    const auth_token = res.data.auth_token
    const request = axios({
      method: 'GET',
      url: url,
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': `Token token=${auth_token}`
      },
    });

    // request.then((response) => {
    //   // callback(response);
    // })
    // request.catch((error) => {
    //   alert(error);
    // })

    return {
      type: FETCH_PROFILE,
      payload: request
    };
  });
}

как мне это сделать? Каков наилучший способ сделать это и метод?

...