вызов диспетчерской функции внутри диспетчерской функции - PullRequest
1 голос
/ 14 июня 2019

Я недавно начал работать с redux (раньше я работал с mobx), и это вызывает у меня некоторые проблемы, я пытаюсь вызвать refresh после успешного ответа, но он не вызывается, где я ошибся? (функция refresh делает запрос к бэкэнду и обновляет дату), (функция editSupply отправляет измененные данные)

export function refresh() {
  return (dispatch, getState) => {
    const state = getState()

    const storeId = state.profile.currentStore.id
    dispatch(actions.setLoading(true))
    return apiGet(stockApi, buildRefreshParameters(storeId, state.stock))
      .onOk((res) => {
        dispatch(
          actions.setData(
            res.data.response.supplies.map((s) => ({
              ...s,
              id: s.stockId,
              salePrice: s.salePrice,
              remainder: s.remainder,
              purchases: s.purchases.map((p) => ({
                ...p,
                purchasePrice: p.price,
              })),
            })),
          ),
        )
        dispatch(actions.setTotalPages(res.data.response.pages))
      })
      .useDefaultErrorHandlers(dispatch)
      .afterAll(() => {
        dispatch(actions.setLoading(false))
      })
      .startSingle()
  }
}
export function editSupply(editedData) {
  return (dispatch, {}) => {
    forEachObjIndexed((data, id) => {
      apiPut(stockApi + "/" + id, data)
        .onOk(() => {
          dispatch(
            showMessage("Товар успешно отредактирован", 
            alertTypes.success),
          )
          refresh()
        })
        .useDefaultErrorHandlers(dispatch)
        .start()
    }, editedData)
  }

}

1 Ответ

2 голосов
/ 14 июня 2019

звоните refresh() вот так:

dispatch(refresh())

Когда вы вызываете другое действие из действия, вы заключаете их в dispatch(). Ваш refresh() выглядит как другое действие, поскольку он принимает dispatch и getState в качестве аргументов.

...