【发布时间】:2021-08-02 09:48:05
【问题描述】:
我有这些代码可以在表格中显示所有挂单。单击“确认”按钮后,将更新状态,仅加载挂单。我唯一的问题是,除非我转到另一个页面,然后我必须返回待处理订单页面才能查看更新后的状态,否则状态不会更新。
class PendingOrders extends Component {
constructor() {
super();
this.state = { orders: [] };
}
columns = [
"Order ID",
{
name: "Confirm",
options: {
filter: true,
sort: false,
empty: true,
customBodyRender: (
value,
tableMeta,
) => {
return (
<FormControlLabel
value={value}
control={
<Button value={value} color="secondary" variant="primary">
confirm
</Button>
}
onClick={(e) => {
try {
firestore.collection("orders").doc(tableMeta.rowData[0]).set(
{
orderStatus: "Confirmed",
},
{ merge: true }
);
} catch (err) {
console.log(err);
}
}}
/>
);
},
},
},
componentDidMount() {
try {
firestore
.collection("orders")
.where("orderStatus", "==", "Pending")
.get()
.then((snapshot) => {
const orders = [];
snapshot.docs.map((doc) => {
const items = [];
orders.push({
const items = [];
doc.data().items.forEach((item) => {
items.push(`${item.productName}(${item.qty}),`);
});
const data = doc.data();
orders.push({
"Order ID": doc.id,
"Items":items,
});
});
this.setState({ orders: orders });
// console.log(this.state.orders);
});
} catch (err) {
console.log(err);
}
}
render() {
return (
<div>
<MUIDataTable
title={"Pending Orders"}
columns={this.columns}
data={this.state.orders}
options={this.options}
/>
</div>
);
}
}
我已经发现了错误。我没有使用.get() 和.then(),而是将其更改为onSnapshot,它已经可以使用了。
componentDidMount() {
try {
firestore
.collection("orders")
.where("orderStatus", "==", "Pending")
.onSnapshot((snapshot) => {
const orders = [];
snapshot.docs.map((doc) => {
const items = [];
orders.push({
const items = [];
doc.data().items.forEach((item) => {
items.push(`${item.productName}(${item.qty}),`);
});
const data = doc.data();
orders.push({
"Order ID": doc.id,
"Items":items,
});
});
this.setState({ orders: orders });
// console.log(this.state.orders);
});
} catch (err) {
console.log(err);
}
}
【问题讨论】:
-
如果我停留在挂单页面,那么它不会更新。但是,如果我将转到另一个页面并返回到待处理订单页面,它将被更新。
标签: javascript reactjs firebase google-cloud-firestore mui-datatable