gpt4 book ai didi

javascript - 仅当 Loader 在 React Native 中使用平面列表结束后才显示空列表消息

转载 作者:行者123 更新时间:2023-11-28 17:10:03 24 4
gpt4 key购买 nike

我有一个平面列表,它将其数据源作为状态获取。实际上,这个数据来自firebase,我一直在使用redux。因此,数据是在操作中获取的,并使用回调我将数据获取到状态。

我想要实现的是,当没有从 api 中找到数据时, View 中应该显示一条空列表消息。实际上,我使用“ListEmptyComponent”实现了这一点。但发生的情况是屏幕以空消息开始,微调器在其下方加载,然后如果找到数据,则消息和微调器都会消失。

但是,我想要的是,当 View 渲染时,每个人应该看到的第一件事是微调器,然后如果数据空微调器隐藏,则显示空列表消息。

如何实现这一点?

我的行动:

export const fetchOrderHistory = (phone, callback) => {
return (dispatch) => {
dispatch({ type: START_SPINNER_ACTION_FOR_ORDER_HISTORY })
firebase.database().ref('orders/'+phone)
.on('value', snapshot => {
const snapShotValue = snapshot.val();
callback(snapShotValue);
dispatch ({ type: ORDER_HISTORY_FETCHED , payload: snapshot.val()});
dispatch({ type: STOP_SPINNER_ACTION_FRO_ORDER_HISTORY })
});

};

};

我的平面列表和微调器:

<FlatList
data={this.state.historyOfOrders}
keyExtractor={item => item.uid}
ListEmptyComponent={this.onListEmpty()}
renderItem={({ item }) => (
<Card
containerStyle={{ borderRadius: 5 }}
>
<View style={styles.topContainerStyle}>
<View>
<TouchableOpacity
onPress={() => this.props.navigation.navigate('ViewOrderScreen', {itemsOfOrder: item}) }
>
<View style={styles.viewOrderContainer}>
<View style={styles.viewOrderTextContainer}>
<Text style={styles.viewOrderTextStyle}>View Order</Text>
</View>
<Icon
name='ios-arrow-forward'
type='ionicon'
color='#ff7675'
/>
</View>
</TouchableOpacity>
</View>
</View>
</View>
</Card>
)}
/>

{this.props.isSpinnerLoading &&
<View style={styles.loading}>
<ActivityIndicator size="large" color="#03A9F4"/>
</View> }

我在设置状态的 componentWillMount 回调:

 componentWillMount() {
this.props.fetchOrderHistory((this.props.phone), (snapShotValue)=> {
const userOrderHistory = _.map(snapShotValue, (val,uid) => ({uid, ...val}))
this.setState({ historyOfOrders: userOrderHistory })
});
}

我的空列表消息:

onListEmpty = () => {
return <View style={{ alignSelf: 'center' }}>
<Text style={{ fontWeight: 'bold', fontSize: 25 }}>No Data</Text>
</View>
}

我的状态:

state = { historyOfOrders: "" }

我使用mapStateToProps从reducer获取微调器值。

请引导我,通过

最佳答案

为此你必须做两件事。首先,仅当加载程序停止时才显示 Flatlist。其次,设置 this.state.historyOfOrders 的默认值为 null 并检查 this.state.historyOfOrders 是否不为 null 则仅显示 Flatlist。

这是一个代码:

{(!this.props.isSpinnerLoading && this.state.historyOfOrders != null) ? 
(
<FlatList
data={this.state.historyOfOrders}
keyExtractor={item => item.uid}
ListEmptyComponent={this.onListEmpty()}
renderItem={({ item }) => (
<Card containerStyle={{ borderRadius: 5 }}>
<View style={styles.topContainerStyle}>
<View>
<TouchableOpacity onPress={() => this.props.navigation.navigate('ViewOrderScreen', {itemsOfOrder: item}) }>
<View style={styles.viewOrderContainer}>
<View style={styles.viewOrderTextContainer}>
<Text style={styles.viewOrderTextStyle}>View Order</Text>
</View>
<Icon
name='ios-arrow-forward'
type='ionicon'
color='#ff7675'
/>
</View>
</TouchableOpacity>
</View>
</View>
</Card>
)}
/>
) : null
}

有了这个条件,即使你想要Flatlist之上的loader也可以做到。

关于javascript - 仅当 Loader 在 React Native 中使用平面列表结束后才显示空列表消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com