【发布时间】:2020-08-31 19:20:30
【问题描述】:
程序.js
import React, { Component } from 'react';
import { StyleSheet, ScrollView, ActivityIndicator, View } from 'react-native';
import { ListItem } from 'react-native-elements'
import firebase from '../database/firebaseDb';
class Programmes extends Component {
constructor() {
super();
this.firestoreRef = firebase.firestore().collection('Programmes');
this.state = {
isLoading: true,
userArr: []
};
}
componentDidMount() {
this.unsubscribe = this.firestoreRef.onSnapshot(this.getCollection);
}
componentWillUnmount(){
this.unsubscribe();
}
getCollection = (querySnapshot) => {
const prgArr = [];
querySnapshot.forEach((res) => {
const { ProgrammeName } = res.data();
prgArr.push({
key: res.id,
res,
ProgrammeName
});
});
this.setState({
prgArr,
isLoading: false,
});
}
render() {
if(this.state.isLoading){
return(
<View style={styles.preloader}>
<ActivityIndicator size="large" color="#9E9E9E"/>
</View>
)
}
return (
<ScrollView style={styles.container}>
{
this.state.prgArr.map((item, i) => {
return (
<ListItem
key={i}
chevron
bottomDivider
title={item.ProgrammeName}
onPress={() => {
this.props.navigation.navigate('Faculties', {
userkey: item.key
});
}}/>
);
})
}
</ScrollView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingBottom: 22
},
preloader: {
left: 0,
right: 0,
top: 0,
bottom: 0,
position: 'absolute',
alignItems: 'center',
justifyContent: 'center'
}
})
export default Programmes;
Faculties.js
import React, { Component } from 'react';
import { StyleSheet, ScrollView, ActivityIndicator, View } from 'react-native';
import { ListItem } from 'react-native-elements'
import firebase from '../database/firebaseDb';
class Faculties extends Component {
constructor() {
super();
this.firestoreRef = firebase.firestore().collection('Faculties');
this.state = {
isLoading: true,
userArr: []
};
}
componentDidMount() {
this.unsubscribe = this.firestoreRef.onSnapshot(this.getCollection);
}
componentWillUnmount(){
this.unsubscribe();
}
getCollection = (querySnapshot) => {
const facArr = [];
querySnapshot.forEach((res) => {
const { FacultyName } = res.data();
facArr.push({
key: res.id,
res,
FacultyName
});
});
this.setState({
facArr,
isLoading: false,
});
}
render() {
if(this.state.isLoading){
return(
<View style={styles.preloader}>
<ActivityIndicator size="large" color="#9E9E9E"/>
</View>
)
}
return (
<ScrollView style={styles.container}>
{
this.state.facArr.map((item, i) => {
return (
<ListItem
key={i}
chevron
bottomDivider
title={item.FacultyName}
onPress={() => {
this.props.navigation.navigate('Courses', {
userkey: item.key
});
}}/>
);
})
}
</ScrollView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingBottom: 22
},
preloader: {
left: 0,
right: 0,
top: 0,
bottom: 0,
position: 'absolute',
alignItems: 'center',
justifyContent: 'center'
}
})
export default Faculties;
从上面的代码可以看出,我能够从两个集合中获取文档。 我想做的是获取 ProgrammeName 的值并从我选择的 ProgrammeName 值中过滤可用的 FacultyName,之后我将从 FacultyName 中选择一个值并被引导到 Courses 屏幕,该屏幕将由 ProgrammeName 的值过滤和我选择的 FacultyName。根据我选择的内容过滤它们的理想方法是什么?
【问题讨论】:
标签: firebase react-native google-cloud-firestore