【发布时间】:2019-07-17 11:33:43
【问题描述】:
多年来,我一直在试图弄清楚当我按下每个呈现的 FlatList 项目时,如何单独记录每个 Firebase Cloudstore 文档 ID。
我可以通过使用onPress={() =>{console.log(this.state.posts[0].key)}} 等来获取某个key / id。但我不知道如何分别获取每个。本质上,我只想要我按下的 touchableOpacity 的文档 ID。不只是 [0]
App 布局的屏幕截图如下,以便您了解和代码示例
PostsLayout.js
export default class PostsLayout extends React.Component {
render() {
const {summary, stringTime, user} = this.props;
return (
<TouchableOpacity
style={styles.container}
onPress={this.props.onPress}
>
<PostsUser user={user}/>
<PostsSummary summary={summary}/>
<PostsDate time={stringTime}/>
</TouchableOpacity>
)
}
}
FlatListLayout.js
export default class FlatListLayout extends React.Component {
render() {
return (
<ScrollView >
<FlatList
data={this.props.data}
renderItem={({item}) => <PostsLayout {...item} onPress={this.props.onPress}/>}
/>
</ScrollView>
)
}
}
ScreenLayout.js
export default class ScreenLayout extends React.Component {
state = {
posts: []
}
db = firebase.firestore()
path = this.db.collection('usersData').doc(firebase.auth().currentUser.uid).collection("posts")
onCollectionUpdate = (querySnapshot) => {
const posts = [];
querySnapshot.forEach((doc) => {
const {summary, time, stringTime, user, userId} = doc.data();
posts.push({
key: doc.id, doc, summary,
time, stringTime, user, userId
});
});
this.setState({
posts
});
}
componentDidMount() {
const {currentUser} = firebase.auth();
this.setState({currentUser})
this.unsubscribe = this.path.onSnapshot(this.onCollectionUpdate)
}
componentWillUnmount() {
this.unsubscribe();
}
render() {
return (
<FlatListLayout
data={this.state.posts}
onPress={() => {console.log(this.state.posts[0].key)}}
/>
)
}
}
感谢您阅读本文,请帮助:)
【问题讨论】:
-
我想我有一个解决您的问题的方法,请先告诉我,
PostsFunction你是说FlatListLayout吗?如果不是,PostsFunction在哪里? -
啊,是的,很抱歉这是一个错误 - 我现在将进行编辑。如果你有解决方案那就太好了!
标签: javascript reactjs firebase react-native google-cloud-firestore