基本上,在所有Redux示例和文档中,该示例都是在处理异步请求(即布尔值,通常是isFetching在发出请求时切换为true,在成功或失败时为false)时进行显示的。
当我加载页面时,将由多个组件进行多个API调用,当对API发出任何请求时,我想显示一个加载指示器。因此,这可能不是最佳解决方案:
您将如何解决这种情况?
谢谢!
答案 0 :(得分:0)
将isFetching
转换为数字。每个挂起的呼叫都会增加该数字,而每个成功/失败都会减少该数字。
const reducer = (state = { fetchingCounter: 0 }, { type }) => {
switch(type) {
FETCHING_PENDING:
return { fetchingCounter: state.fetchingCounter + 1 };
FETCHING_DONE:
return { fetchingCounter: state.fetchingCounter - 1 };
}
return state;
};
添加一个selector来将数字转换为布尔值-
const isFetching = ({ isFetching }) => !!isFetching
答案 1 :(得分:0)
希望在几个月内,您将能够使用新的fetcher / createResource概念与Suspense一起轻松处理此问题。在第25分钟左右,您可以在Andrew Clark的Concurrent Rendering in React presentation中看到对此的描述。但这是未来的功能(Suspense已经可用,但仅与代码拆分集成,尚未与API调用集成)。
因此,到目前为止,您有两个主要选择: