Redux-Thunk getStore () не сохраняет состояние.Возврат неопределенного - PullRequest
0 голосов
/ 07 июня 2018

Это может быть вопрос лучших практик, но я был бы признателен за объяснение того, почему это не работает.Я использую Typescript + Redux + Thunk и пытаюсь вызвать такие действия:

export const requestUserDashboards  = createAction<DashboardModel>(Type.REQUEST_USER_DASHBOARDS);

Отправка в выборке:

export const fetchDashboards = () => {
        return async (dispatch: Dispatch, getState: any) => {
            try {
                dispatch(requestUserDashboards({ 
                    currentDashboard: getState.currentDashboard,
                    dashboards: getState.dashboards,
                    hasDashboards: false,
                    error: getState.error
                }))

             ...
             }
         })
}

Вот соответствующий редуктор:

export const dashboardReducer = handleActions<RootState.DashboardState, DashboardModel>(
  {
    [DashboardActions.Type.REQUEST_USER_DASHBOARDS]: (state = initialState, action): RootState.DashboardState => ({
      currentDashboard: action.payload!.currentDashboard,
      dashboards: action.payload!.dashboards,
      hasDashboards: action.payload!.hasDashboards,
      error: action.payload!.error
    })
  },
  initialState
);

диспетчеризация работает, однако getState неправильно собирает текущее состояние хранилища.Я проверяю это, выполняя следующие действия в компоненте, получающем обновленное хранилище:

componentWillReceiveProps(nextProps: Login.Props) {
    console.log(nextProps.defaultAccounts.defaultAccount);
}

Вызываем это в компоненте, используя:

this.props.defaultAccountActions.fetchUserDefaultAccount();

Действиеработает, так как значения из выборки собираются.

Однако, когда я использую getState.xxxx, эти значения возвращаются как неопределенные:

index.tsx:84 Uncaught TypeError: Cannot read property 'defaultAccount' of undefined

InitialState от моего редуктора работает.Я вижу это, выполнив console.log(this.props.defaultAccounts.defaultAccount) из функции componentWillMount().

Я не уверен, что еще я могу предоставить.Я думаю, что на самом деле просто в корне неправильно понимаю, как действия / редукторы управляют магазином.

Вопросы

Я пытаюсь получить текущие значения хранилища, используя getState.xxxx в отправке.Это правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если вы используете mapstatetoprops в своем компоненте, вы можете использовать его для получения значений из хранилища.Первый аргумент mapStateToProps на самом деле является состоянием Redux.Это практически абстрагированный getState ().

const mapStateToProps = function(state, ownProps) {
   // state is equivalent to store.getState()
   // you then get the slice of data you need from the redux store
   // and pass it as props to your component

   return {
     someData: state.someData
   }
}
0 голосов
/ 07 июня 2018

Разве getState не является функцией в этом месте?Так что вам нужно будет сделать что-то

 const state = getState();

, а затем использовать состояние внутри диспетчеризации

, найденной в документации, да, это функция в этом месте, поэтому вы должны сначала вызвать функцию, чтобы получить состояниеа затем использовать его (например, из документации ниже)

function incrementIfOdd() {
  return (dispatch, getState) => {
    const { counter } = getState();

    if (counter % 2 === 0) {
      return;
    }

    dispatch(increment());
  };
}
...