Reactjs 如何创建可重用的异步thunk而无需进行不必要的渲染

Reactjs 如何创建可重用的异步thunk而无需进行不必要的渲染,reactjs,redux,redux-thunk,Reactjs,Redux,Redux Thunk,我有以下两个Redux操作(thunk) 其中每一个都可以单独使用,并且工作良好 当我想异步使用它们时,我会使用以下操作: export const getAll = () => async (dispatch, getState) => { await Promise.allSettled([ dispatch(getA()), dispatch(getB()) ]) } 这很好,但是当我使用它时,组件渲染两次(Promise中的每个分派一次),如何更新此代码以删除不必要的渲

我有以下两个Redux操作(thunk)

其中每一个都可以单独使用,并且工作良好

当我想异步使用它们时,我会使用以下操作:

export const getAll = () => async (dispatch, getState) => {
  await Promise.allSettled([ dispatch(getA()), dispatch(getB()) ])
}
这很好,但是当我使用它时,组件渲染两次(Promise中的每个分派一次),如何更新此代码以删除不必要的渲染? (但仍可以单独重用函数)

我考虑了一个链接解决方案,但我还没有弄清楚如何让它工作,因为我不能将对象作为动作传递,所以我不确定它是否可能

Aobj.fetch().dispatch();
Bobj.fetch().dispatch();
和异步获取,类似于:

Promise.allSettled([Aobj.fetch(), Bobj.fetch()])
.then(response => {
  dispatch({ type: 'ALL_FETCHED', payload: response })
})
PS:此代码只是一个简化的代码,例如,为了增加我被理解的机会,请尝试使用批处理:

  import { batch } from 'react-redux';

  const test = () => {
    batch(() => {
      dispatch(getA);
      dispatch(getB);
    });
  };

那么,同一个组件是否同时使用两个获取的数据?因为如果是这样的话,它会呈现两次是正确的,因为redux状态会更新两次。

deleted deleted当我将操作作为“getA”传递时,不会执行分派。当我将其用作“getA()”时,将执行分派,但仍会看到不必要的渲染。可能是因为我在getA和getB操作中使用了dispatch。但我仍然希望它能够单独工作,所以问题是如何更新它,使其不进行不必要的渲染?也许是完全不同的解决方案?我很确定我不是第一个有这个问题的人。我只是不知道该说些什么:)
  import { batch } from 'react-redux';

  const test = () => {
    batch(() => {
      dispatch(getA);
      dispatch(getB);
    });
  };