javascript - 调用带参数的 Action

标签 javascript reactjs redux rxjs

我正在使用 React + Redux + Rxjs + typesafe-actions + TS,我想用参数调用 Action 。我现在的代码:

Action :

import { createAsyncAction } from 'typesafe-actions';
import {ICats} from '/api/cats';

export const FETCH_CATS_REQUEST = 'cats/FETCH_CATS_REQUEST';
export const FETCH_CATS_SUCCESS = 'cats/FETCH_CATS_SUCCESS';
export const FETCH_CATS_ERROR = 'cats/FETCH_CATS_ERROR';

export const fetchCats = createAsyncAction(
    FETCH_CATS_REQUEST,
    FETCH_CATS_SUCCESS,
    FETCH_CATS_ERROR
) <void, ICats, Error> ();

调用调度:

store.dispatch(fetchCats.request());

我的史诗:

const fetchCatsFlow: Epic<Types.RootAction, Types.RootAction, Types.RootState> = (action$) =>
    action$.pipe(
        filter(isActionOf(fetchCats.request)),
        switchMap(() =>
            fromPromise(Cats.getDataFromAPI()).pipe(
                map(fetchCats.success),
                catchError(pipe(fetchCats.failure, of))
            )
        )
    );

应用程序接口(interface):

export const Cats = {
    getDataFromAPI: () => $http.get('/cats').then(res => {
        return res.data as any;
    }),
};

它正在运行 - 调用 API 但没有参数。我尝试了很多次,但仍然不知道如何在调用 dispatch 时传递参数。

最佳答案

我找到了答案:

export const fetchCats = createAsyncAction(
    FETCH_CATS_REQUEST,
    FETCH_CATS_SUCCESS,
    FETCH_CATS_ERROR
) <void, ICats, Error> ();

改为:

type ICatsRequest = {
    catType: string;
};

export const fetchCats = createAsyncAction(
    FETCH_CATS_REQUEST,
    FETCH_CATS_SUCCESS,
    FETCH_CATS_ERROR
) <ICatsRequest, ICats, Error> ();

然后它允许我将指定的类型传递给调度:

store.dispatch(fetchCats.request({catType: 'XXX'}));

我还需要修改这个:

export const Cats = {
    getDataFromAPI: (params) => $http.get('/cats', {
        params: {
            type: params.payload.catType
        }
    }).then(res => {
        return res.data as any;
    }),
};

switchMap((params) =>
        fromPromise(Cats.getDataFromAPI(params)).pipe(
            map(fetchCats.success),
            catchError(pipe(fetchCats.failure, of))
    )
)

关于javascript - 调用带参数的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396946/

相关文章:

javascript - html |文本区域中的额外选项卡

javascript - 了解 html 中外部 .js 文件的 "order matters"

javascript - 脚本之间的通信 |三种方法

javascript - 当全局变量改变时更新 react 组件状态

Redux – 依赖于其他状态的 Reducer

javascript - 使用 Javascript 制作电影或幻灯片

javascript - 如何使用 React 创建可运行的代码片段?

javascript - 识别无序列表中单击的按钮: React

javascript - 如何将 html 转换为 JSX、ReactJS 组件?

reactjs - React Redux 处理每个组件特有的错误/成功消息的正确方法