【发布时间】:2021-07-30 13:24:19
【问题描述】:
我有一个 react native 组件,它根据我的 firestore 数据库中有多少显示任务列表。它们最初在页面第一次渲染时被渲染。
用户可以添加任务,并且我希望在将新任务添加/更新到 firestore 数据库后,屏幕上的组件能够在屏幕上重新显示。任务是从我数据库中的任务集合中呈现的。
Firesstore Firebase 结构:
users(collection)-->tasks(collection)-->taskdata(document)
从后端请求任务并将其设置为它们所在类组件的本地状态。
constructor(props) {
this.state = {
tasks_: []
}
}
在数据库的快照请求下获取给定用户 ID 的任务并将它们设置为本地状态。
getInfoHandler() {
var docRefTest =
db.collection('users').doc(this.state.id).collection('tasks').get()
.then(querySnapshot => {
const documents = querySnapshot.docs.map(doc => doc.data());
this.setState({ tasks_: documents });
});
组件从本地状态检索任务并将它们呈现在页面上。根据存储在后端数据库中的任务映射它们。
在页面渲染时通过组件调用 getInfoHandler() 函数获取任务。
我希望每次自动添加任务时都呈现一个新组件。
export default class Tasks extends React.Component {
getInfoHandler() {
var docRefTest =
db.collection('users').doc(this.state.id).collection('tasks').get()
.then(querySnapshot => {
const documents = querySnapshot.docs.map(doc => doc.data());
this.setState({ tasks_: documents });
});
componentDidMount () {
this.getInfoHandler();
}
render() {
const tasks1 = this.state.tasks;
return (
<View style={styles.tasks}>
{tasks1.map((task) => {
return (
<TaskItem
notes={task.notes}
reminder={task.reminder}
name={task.name}
assigned={task.assigned}
/>
);
})}
</View>
)
}
}
addTaskHandler() 用于将任务添加到后端。它位于不同的模态组件中,并在按钮提交和关闭模态时激活
addTaskHandler () {
db.collection('users').doc(this.state.id).collection('tasks').doc().set({
name: this.state.name,
assigned: this.state.assigned,
tag: this.state.tag
})
}
【问题讨论】:
-
添加新任务的代码在哪里?
-
它在页面上弹出的另一个模态组件中我可以编辑问题并添加它。
-
据我了解,您希望在 Firestore 之后本地呈现该新任务。所以你也可以分享那个代码?
-
是的,页面已打开,并且已经存在的任务出现......但如果用户向数据库添加新任务,我希望它出现在页面上,而无需手动刷新页面。
-
我想我可能需要使用 snapshot() 或 componentDidUpdate() 吗?
标签: reactjs react-native google-cloud-firestore addeventlistener