Redux:无需修改存储的异步操作

Posted

技术标签:

【中文标题】Redux:无需修改存储的异步操作【英文标题】:Redux: async actions without modifying the store 【发布时间】:2016-12-18 12:20:13 【问题描述】:

即使这个 http 请求没有修改 store,从 redux-thunk 中间件发送 http 请求是个好主意吗? 这是一些解释我的意思的代码:

export const CONFIRM_UPLOAD_REQUEST = 'CONFIRM_UPLOAD_REQUEST';
export const CONFIRM_UPLOAD_SUCCESS = 'CONFIRM_UPLOAD_SUCCESS';
export const CONFIRM_UPLOAD_FAILURE = 'CONFIRM_UPLOAD_FAILURE';

function _confirmUpload() 
  return 
    [CALL_API]: 
      types: [CONFIRM_UPLOAD_REQUEST, CONFIRM_UPLOAD_SUCCESS, CONFIRM_UPLOAD_FAILURE],
      requestMethod: 'POST',
      endpoint: `upload/confirm`
    
  ;


export function confirmUpload() 
  return (dispatch) => dispatch(_confirmUpload());

当我发送此操作时,我的中间件将执行 POST 上传/确认 请求。它不会修改商店(所以我没有 CONFIRM_UPLOAD_SUCCESS 的减速器)。

问题:这种方法有多糟糕?我必须直接执行 http 请求(而不是通过中间件)吗?

【问题讨论】:

不确定它是否是好的实践——但你可以在不调度它的情况下运行该函数(因为它没有更新存储):export function confirmUpload() /*regular http request here*/ 不需要为减速器返回对象,因为它不是调度 【参考方案1】:

回答我自己的问题,是的,这是不好的做法,因为即使组件的属性没有更改,组件也会被重新渲染

【讨论】:

以上是关于Redux:无需修改存储的异步操作的主要内容,如果未能解决你的问题,请参考以下文章

Redux 和 isFetching 中的顺序异步操作

如何使用 redux-axios-middleware 测试 Redux 异步操作

使用 Redux Toolkit 调度多个异步操作

Redux-thunk 异步操作:使用自定义中间件进行异步操作

请求完成后触发 Redux 异步操作。为啥?

使用 typescript 将异步操作发送到 redux 调度