javascript - React Native Loader 在每个组件或根目录中?
问题描述
我们应该在每个 Component 中使用 Loader 组件(任何自定义 Loader)并使用专用的 state reducer 变量通过相关 API 调用来切换它,还是应该在应用程序的根目录中使用 Loader 并在任何 API 实例上切换它?
如果我们使用根 Loader 组件,它具有属性
{position: 'absolute', top:0, bottom:0, right:0, left:0}
(全屏加载程序)。尽管它会摆脱多行代码来单独切换每个加载器组件,但如果一个 API 端点崩溃或加载时间过长,它不会阻止用户访问任何其他页面。
最佳做法是什么?
解决方案
我用自定义组件包裹了我的所有屏幕,所以我有一个包裹所有屏幕的组件,我在这个组件上显示加载:
ScreenContainer 组件:
function ScreenContainer({
barStyle = "dark-content",
statusBarColor = Colors.whiteFFF,
children,
containerStyle,
loading = false,
translucent = false,
}: ScreenContainerProps) {
useFocusEffect(
React.useCallback(() => {
StatusBar.setBarStyle(barStyle);
StatusBar.setBackgroundColor(statusBarColor);
StatusBar.setTranslucent(translucent);
}, []),
);
return (
<View
style={[
{
flex: 1,
},
containerStyle,
]}
>
{loading ? <LoadingOverlay show={loading} /> : null}
{children}
</View>
);
}
加载覆盖组件:
function LoadingOverlay({ show = false }: LoadingOverlayProps) {
return (
<Modal
transparent
visible={show}
animated
animationType="fade"
presentationStyle="overFullScreen"
>
<StatusBar backgroundColor="rgba(0,0,0,0.3)" barStyle="light-content" />
<View
style={{
backgroundColor: "rgb(33, 33, 33)",
opacity: 0.4,
alignItems: "center",
justifyContent: "center",
flex: 1,
}}
>
<TLoader />
</View>
</Modal>
);
}
推荐阅读
- python - 如何使用 FastApi 依赖项向 OpenAPI 模式添加描述
- python - 如何触发用户输入的“撤消”
- python - I can't get the a tag using Beautifulsoup, though I can get other tags
- javascript - 导出 PDF 注释(亮点和注释)
- arrays - 当我 console.log 相同的数组时,我得到两个不同的值
- excel - 没有通过 Excel Vba 在两个新创建的 Word 文档之间切换
- python-3.x - 提高内部有许多小部件的 tkinter 可滚动画布的性能
- mailchimp - 如何在 mailchimp API v3.0 上获取具有特定标签的成员总数?
- c++ - 无论我尝试什么 c++,带有指针的代码都会给出 1
- c++ - 过时的 QCameraControl、QMediaControl、QMediaService 类的替代品是什么?