【发布时间】:2020-08-16 19:36:42
【问题描述】:
我需要从另一个人那里调用 ActionCreator
ducks/products.ts - 产品的 ActionCreator 和 Reducers...
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: Dispatch, getState: () => any, { auth, db }: IServices) => Promise' 类型的参数不可分配给'AnyAction' 类型的参数。
类型 '(dispatch: Dispatch, getState: () => any, { auth, db }: IServices) => Promise' 中缺少属性 'type' 但在类型 'AnyAction' 中是必需的
【问题讨论】:
-
您的 thunk 操作需要返回一个承诺(尤其是 setStock)。然后在 addProduct 中您可以这样做:
await dispatch(setStock(producto))您还将产品 id 传递给 setStock 但我认为 setStock 期望产品本身。 -
我做不到,我收到打字稿错误,缺少类型属性并且 setStock 不能分配给 AnyAction
标签: reactjs typescript redux