有没有机会将组件用作全局活动指示器,该组件具有透明颜色,并且是由我在 React-Native 上创建的?
详:
- 我使用 redux 存储来更新 UI。所以我打算通过更新商店来显示活动指示器。
- 我创建了一个名为
ActIndicator
的ActivityIndicator
组件。 - 我有一个包含该应用程序的主要
App
组件。 - 我有一个包装
ActIndicator
和App
组件的Root
组件。
组件render
方法Root
最终代码如下所示:
render() {
if (this.state.showActivityIndicator) {
return(
<ActIndicator>
<App />
</ActIndicator>
)
}
return (</App>)
}
我已经尝试了几种方法,但我不能成功。
我想我的大脑停止了。
我也猜可能是逻辑错误。
const withLoadingOverlay = (Component) => class withLoadingOverlayView extends React.Component { props: withLoadingOverlayProps
// Indicator view styles loadingOverlay = (style) => (
<View style={[style, styles.someDefaultStyles]}>
<ActivityIndicator color={someColor} size="large" />
</View> )
render() {
const { pending, ...passProps } = this.props;
const { width, height } = Dimensions.get('window');
return (
<View style={{ flex: 1 }}>
<Component {...passProps} />
{pending && this.loadingOverlay({ width, height })}
</View>
); } };
我曾经用 HOC 和 redux 操作包装整个容器,以在启动挂起的 prop true 和成功时或失败时设置为 false,因此这个 prop 将被 HOC 使用,并且只有在挂起设置为 true 时才会显示指示器。
在容器中,您必须在连接中包装组件
export default connect(
(state) => ({
pending: state.reducer.pending, // pending prop should be here
}),
(dispatch) => ({ dispatching redux actions })
)(withLoadingOverlay(WrappedComponent));
我认为
你不应该像小时候通过 App,我使用它的方式更像是这样的:
render() {
if (this.state.showActivityIndicator) {
return(
<View>
<ActivityIndicator />
<App />
</View>
)
}
return (<App />)
}
但是最好这样设置:
render() {
return (
<View>
<ActivityIndicator animating={this.state.showActivityIndicator} />
<App />
</View>
)
}