Это может быть вопрос лучших практик, но я был бы признателен за объяснение того, почему это не работает.Я использую 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
в отправке.Это правильный способ сделать это?