【发布时间】:2020-01-14 14:32:09
【问题描述】:
我有一个显示用户列表的基本组件,当组件被挂载时,我使用useEffect 进行 API 调用来加载数据,而在数据加载时我想在 UI 中显示加载器。
我的理解是 loader 标志应该保持在 react 组件的状态,因为它代表了该组件的状态,不在 redux store 中,因为 redux store 代表/保存整个应用程序的状态 strong> 所以像登录用户、用户列表等,而不是 React 组件的每个可能状态,从应用程序架构的角度来看,这种想法是错误的还是不正确的?
我的理由是,如果我们要在 redux store 中存储加载标志,那么为什么还要使用 react 组件的 state 而不仅仅是使用 redux store?
如果不是,那么最简单的方法是什么?
反应组件
function List(props) {
const [loading, setLoading] = useState(false);
const reduxData = useSelector((store) => {
return {
users: store.users.list,
};
});
useEffect(() => {
//show loader
setLoading(true);
//wait until data is loaded
props.requestRequests();
// hide loader
setLoading(false);
}, []);
if (loading) {
return (
<Loader />
)
}
return (
<Table users={reduxData.users} />
);
}
【问题讨论】:
-
您可以尝试使用自定义减速器和操作来跟踪请求状态。像
setRequestStatus(requestId, REQUEST_STATUS.LOADING)这样的东西。将其与选择器混合使用,您将获得一种清晰灵活的方式来了解每个请求状态:)。 -
我想这取决于您是在加载数据时想要在整个页面上使用“垫片”,还是仅仅覆盖将显示数据的组件。你要哪一个?
-
只显示特定组件的加载器(而不是整个页面上的 shim),因为我认为它可以直观地了解 UI 的哪个部分正在等待数据。
标签: javascript reactjs redux redux-saga