Как передать параметры в вызове asyn c api thunk - PullRequest
1 голос
/ 11 апреля 2020

Привет, я пытаюсь передать параметр для метода post в вызове API в промежуточном программном обеспечении с избыточностью. Но это не вызывает действие. Может ли кто-нибудь взглянуть на код и сказать, какую ошибку я делаю:

import API from "../../_metronic/utils/api";

let FetchActions = async (id,dispatch) => {
  await API.post("companies/",id)
    .then(res => dispatch({ type: "FETCH_COMPANIES", payload: res.data }))
    .catch(err => console.log(err));
};

export default FetchActions;

Я получаю следующую ошибку:

TypeError: dispatch is not a function
    at fetchAction.js:6

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

import API from "../../_metronic/utils/api";

let FetchActions = id => async (dispatch, getState) => {
  await API.post("companies/",id)
    .then((res) => {
      dispatch({ type: "FETCH_COMPANIES", payload: res.data })
    })
    .catch((err) => {
      console.log(err)
    });
};

export default FetchActions;
1 голос
/ 11 апреля 2020

Вы ошибаетесь в синтаксисе, поскольку redux-thunk требуется callback function для возврата из метода. Другое дело, что если вы используете await, вам не нужно иметь .then и .catch, вместо этого вам следует заключить этот код в блок try-catch.

Следующий код должен работать для вас.

import API from "../../_metronic/utils/api";

let FetchActions = async (id) => {
  return async (dispatch, getState) => {
      try {
       const res = await API.post("companies/",id);
       dispatch({ type: "FETCH_COMPANIES", payload: res.data })
      } catch(err) {
         console.log(err)
      }
 }
};

export default FetchActions;

Подробнее о создателях экшена см. здесь redux-thunk .

...