有没有办法强力输入Sagas Put操作?

阿萨夫·阿维夫(Asaf Aviv)

在redux-thunk中,我们可以定义什么类型的actions可以dispatch

enum MoviesTypes {
  ADD_MOVIES = 'ADD_MOVIES',
}

interface AddMoviesAction {
  type: typeof MoviesTypes.ADD_MOVIES;
  movies: MovieShowcase[];
}

type MoviesActionTypes = 
  | AddMoviesAction;

const addMovies = (movies: MovieShowcase[]): MoviesActionTypes => ({
  type: MoviesTypes.ADD_MOVIES,
  movies,
});

// ThunkAction<any, any, any, MoviesActionTypes> <---
// dispatch only actions inside MoviesActionTypes
const fetchNextPage = (
  page: number
): ThunkAction<Promise<void>, {}, {}, MoviesActionTypes> => async (dispatch) => {
  dispatch({ type: 'BAD_TYPE' }); // error
  dispatch({ type: MoviesTypes.ADD_MOVIES, movies: [] }); // good
};

有可能对传奇做同样的事情吗?

我怎么能严格地说我们只能put在内部调用动作MoviesActionTypes

function* fetchMovies({ page }: FetchMoviesAction) {
  yield put({ type: MoviesTypes.ADD_MOVIES, movies: [] }); // good
  yield put({ type: 'BAD_TYPE' }); // good
}

function* watchFetchMovies() {
  yield takeEvery(MoviesTypes.FETCH_MOVIES, fetchMovies);
}
丹尼尔森

put 是通用的:

export function put<A extends Action>(action: A): PutEffect<A>

因此,只需编写一个put受应用程序操作类型约束的版本

import {
  put as putUntyped,
} from "redux-saga/effects";

export const put = <A extends FetchMoviesAction>(action: A): PutEffect<A> =>
  putUntyped(action);

然后在任何可能放置put的地方使用它:

import { put } from "...";

yield put({ type: MoviesTypes.ADD_MOVIES, movies: [] });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法对输入数据执行操作?

有没有办法取消 DispatchQueue concurrentPerform 操作?

有没有办法以编程方式列出AWS服务的所有可用操作?

有没有办法为所有操作为 CancellationToken 创建过滤器?

有没有办法在python中执行HTTP PUT

有没有办法了解ftp_put失败的原因?

有没有办法在 XSL 操作中设置条件:“AddChange”?

有没有办法从实例获取平台和操作系统

gWidget :有没有办法在 testthat 中模拟用户操作?

有没有办法用Ansible自动化OpenStack Swift操作

有没有办法用类似的订阅来简化条件 switchMap 操作?

有没有办法钩住 std 容器的插入和删除操作?

当 HTML5 通知消失时,有没有办法执行操作?

有没有办法在Go中编写可能失败的操作?

有没有办法将上次操作的结果放入变量中

有没有办法在蚂蚁设计图片预览操作中更改图标?

当不支持沙箱操作时,有没有办法让bazel使用沙箱目录?

Spring Data Rest-有没有办法限制支持的操作?

有没有办法以R返回操作系统编号格式

有没有办法对bash中括号内的数字进行操作?

有没有办法使文件操作在Windows中看起来像?

有没有办法通过GitHub操作来推动更改?

有没有办法将带参数的方法作为新操作传递?

有没有办法从嵌入式 ViewController 更改 Tabbar 图像和操作?

有没有办法在异步操作执行之前更改其优先级?

Python中有没有办法告诉特定函数如何操作我的类对象?

有没有办法在Python中中断shutdownil copytree操作?

有没有办法更快地执行此操作?

有没有办法在C ++ Visual Studio 2019(社区版)中允许此操作?