Вызов ActionCreator из другого ActionCreator - PullRequest
2 голосов
/ 02 мая 2020

Мне нужно вызвать ActionCreator из другого

утки / products.ts - ActionCreator и редукторы продуктов ...

import { setStock } from './Store.ts';
//....
export const addProduct = (product: IProduct) => async (
  dispatch: Dispatch,
  getState: () => IState,
  { auth }: IServices
) => {
    dispatch(fetchStart());

    const response = await Axios.post('/api/products', product)

    const producto = response.data as IDataProduct

    // # I need to call SetStock() 
    // # [Try 1] to Call
    setStock(producto)

    // # [Try 2] to Call
    // return (dispatch2: any) => {
      //  dispatch2(
         //setStock(producto._id)
        //  )
    // }

    dispatch(fetchSucess(producto))
};

Я видел пример который использовал try 2 , но он не работает, а first try ничего не делает,

ducks / stores.ts

export const setStock = (product: any) => async (
  dispatch: Dispatch,
  getState: () => any,
  { auth, db }: IServices
) => {
  console.log('INIT SETSTOCKACTIONCREATOR....')
  dispatch(fetchStart());
  try {
    const ref = db.collection("stores").doc(storeId);    
    await ref.update({ [product._id]: product.newStock });

    dispatch(updateSucess({ _id: storeId, stock: product.newStock, productId: product.productId }));

  } catch (error) {    
    dispatch(fetchError(error));
  }
};

Я не могу выполнить Dispatch (setStock (producto)) , потому что из машинописи получаю следующее:

Аргумент типа '(рассылка: Dispatch, getState: () => any, {auth, db}: IServices) => Promise 'нельзя назначить параметру типа' AnyAction '.

Свойство 'type' отсутствует в типе '(dispatch: Dispatch, getState: () => any, {auth, db}: IServices) => Promise', но требуется для типа 'AnyAction'

1 Ответ

2 голосов
/ 02 мая 2020

Вам просто нужно отправить действие setStock вроде dispatch(setStock(producto._id)), которое похоже на то, что вы делаете для fetchStart

export const addProduct = (product: IProduct) => async (
  dispatch: ThunkAction<Promise<void>, {}, {}, AnyAction>,
  getState: () => IState,
  { auth }: IServices
) => {
    dispatch(fetchStart());

    const response = await Axios.post('/api/products', product)

    const producto = response.data as IDataProduct

    dispatch(setStock(producto._id))


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