store.subscribe () не работает в сервисной функции помощника при изменении состояния - PullRequest
0 голосов
/ 07 мая 2019

В основном я получаю токен в своем ответе API входа в систему, который используется в сетевых запросах в качестве заголовка. Я храню этот токен в своем магазине. Я использую axios для всех моих вызовов API. Я создал экземпляр axios, как показано ниже:

axios.js

const axiosInstance = axios.create({
    baseURL: 'http://localhost:3003',
    // timeout: 10000,
    headers: {
        Authorization: ~token~,
        environment: 'production'
    }
});

Так что я могу называть свой apis в thunks как:

const resp = await axiosInstance.get(`/log/dashboardchartdatafromdate=${dateData.dateRange.from}&todate=${dateData.dateRange.to}`);

Я попытался подписаться на редукционный магазин, как показано ниже: axios.js:

import configureStore from '../store';

 configureStore().subscribe(() => {
    token = configureStore().getState().loginReducer.token; //access token here
    console.log(token);
 });

Мой магазин выглядит так:

store.js

export default function configureStore(initialState) {
  const composeEnhancers = window.REDUX_DEVTOOLS_EXTENSION_COMPOSE || compose;
  return createStore(reducers, composeEnhancers(applyMiddleware(thunk)));
}

Моя проблема в том, что блок кода не работает при изменении состояния. Работает только один раз при запуске приложения.

Я не уверен, смогу ли я подписаться на магазин внутри вспомогательной сервисной функции, как я пытался. Пожалуйста, поправьте меня, если я делаю это неправильно.

1 Ответ

1 голос
/ 07 мая 2019

Создатель ваших действий просто должен выглядеть примерно так. Вы можете использовать дополнительную функцию getState (), которая доступна в качестве аргумента внутри thunk-действий. Это лучшая альтернатива, чем подписка на ваш магазин.

axiosInstance.js:

export default const axiosInstance = (token) => {
   return axios.create({
       baseURL: 'http://localhost:3003',
       // timeout: 10000,
       headers: {
          Authorization: token,
          environment: 'production'
       }
   });
}

Ваш файл действий:

import axiosInstance from "./axiosInstance"


const getDashboardData = (dateData) => {
    return (dispatch, getState) => {
        const token = getState().loginReducer.token

        const resp = axiosInstance(token).get(`/log/dashboardchartdatafromdate=${dateData.dateRange.from}&todate=${dateData.dateRange.to}`);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...