Redux не распознает диспетчерское действие в операторе соединения - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь осуществить выход из системы на боковой панели моего приложения. Боковая панель также отвечает за переключение некоторых диалогов, связанных с другим состоянием. состояние диалога, похоже, не имеет значения. Однако, когда я пытаюсь отправить свое действие выхода из системы, он выдает эту ошибку

  Type '(dispatch: Dispatch<{ type: "[Auth] LOGIN_REQUEST"; payload: Credentials; } | { type: "[Auth] LOGIN_SUCCESS"; payload: Credentials; } | { type: "[Auth] LOGIN_FAILURE"; } | { type: "[Auth] LOGOUT"; }>) => { ...; }' is not assignable to type 'MapDispatchToPropsFactory<DispatchProps, OwnProps>'.
    Type '{ logout: () => { type: "[Auth] LOGOUT"; }; }' is not assignable to type 'MapDispatchToPropsFunction<DispatchProps, OwnProps>'.
      Type '{ logout: () => { type: "[Auth] LOGOUT"; }; }' provides no match for the signature '(dispatch: Dispatch<Action<any>>, ownProps: OwnProps): DispatchProps'.```

WHAT DOES IT MEAN PROVIDES NO MATCH FOR THE SIGNATURE! I've tried everything I can think of...

это мой код для передачи действия (подключиться):

interface DispatchProps {
  showBreachForm: (isOpen: boolean) => void
  showOPIForm: (isOpen: boolean) => void
  showPreapprovalForm: (isOpen: boolean) => void
  toggleDialog: (isOpen: boolean) => void
  logout: () => void
}


const MapDispatchToProps = (dispatch: Dispatch<fromDialogActions.Actions>, ownProps: OwnProps) => ({
  showBForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showBForm(isOpen)),
  showOForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showOForm(isOpen)),
  showPForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showPForm(isOpen)),
  toggleDialog: (isOpen: boolean) => dispatch(fromDialogActions.actions.toggleDialog(isOpen)),
})

const MapLogoutToProps = (dispatch: Dispatch<fromActions.Actions>) => ({
  logout: () => dispatch(fromActions.actions.logout())
})

export default withRouter(
  connect<StateProps, DispatchProps, OwnProps>(
    MapStateToProps,
    MapLogoutToProps,
    MapDispatchToProps,
  )(SideBar as any)
)
//the error occurs in the above statement on MapLogoutToProps

PROGRESS: функция Connect работает, если я удаляю упаковку withRouter. Однако это должно быть там. Может быть, проблема заключается в конфликте типов?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Вот решение, которое я не знал о функции COMPOSE, и отладка машинописного текста бесполезна в этой ситуации

const MapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) => ({
  showBForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showBForm(isOpen)),
  showOForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showOForm(isOpen)),
  showPForm: (isOpen: boolean) => dispatch(fromDialogActions.actions.showPForm(isOpen)),
  toggleDialog: (isOpen: boolean) => dispatch(fromDialogActions.actions.toggleDialog(isOpen)),
  logout: () => dispatch(fromActions.actions.logout())
})


export default compose(
    withRouter
)(
  connect<StateProps, DispatchProps, OwnProps>(
    MapStateToProps,
    MapDispatchToProps,
  )(SideBar as any))
0 голосов
/ 27 марта 2019

mapDispatchToProps ожидает функцию, которая принимает второй необязательный аргумент ownProps.

Попробуйте этот код:

const MapLogoutToProps = (dispatch: Dispatch<fromActions.Actions>, ownProps?: OwnProps) => ({
  logout: () => dispatch(fromActions.actions.logout())
})

Если это поможет с MapLogoutToProps, то вы, вероятно, получите аналогичную ошибку с MapDispatchToProps, поскольку третий аргумент connect должен быть mergeProps с другой подписью.

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