当另一个组件的状态发生变化时如何重新加载组件 React

How to reload the component when the state of another component changes React

我正在制作一个带有 React 和 firebase 的电子商务应用 <cart /> 组件包含两个子组件

1-<BasketItem /> (此组件将根据用户添加到购物车的商品数量进行复制,并且它具有让用户修改商品数量的功能项目 )

2- <OrderSummary /> (此组件将向用户显示其购物车的总价和运费)

当然,所有项目数据和总数都将从数据库中获取(我使用的是 firestore),但问题是当用户从 <BasketItem /> 组件更新项目数量时<OrderSummary /> 的总价也没有更新,因为数据库调用已经完成,而且没有办法调用从数据库获取数据的函数,因为没有 父子关系 两个组件之间的关系,我无法在它们之间传递 props 我已经尝试为此使用 react-context-api 但这并没有解决问题,因为最多日期在数据库中,更新总值的唯一方法是刷新页面,这不是一个好的用户体验。

在任何 React all 中,当您更新状态中的购物车信息时,所有受影响的 UI 组件都应该更新(因为它们都应该观察到)。

使用 Firestore 时,您将使用所谓的 CQRS 模式,其中发送 数据库的更新是与侦听器分开的流 数据库。您通常会在 create/mount 组件时添加侦听器,以便它们始终在组件对用户可见时进行侦听。

设置到位后,更新流程变为:

  1. 您的代码通过 Firebase SDK 将新值写入数据库。
  2. 这会在某个时候写入服务器上的数据库。
  3. 服务器将此信息发送给所有其他客户端,并向写入值的客户端发送确认。
  4. 这会触发您之前注册的侦听器。
  5. 侦听器更新应用状态中的数据。
  6. 然后最终触发受影响组件的重绘。

这是一般流程,但它适用于我能想到的所有情况。

通常最好的做法是将状态也以 context-api 或 redux-store 的形式存储在前端,或者简单地作为组件的状态,他们尝试在前端同步这个状态- 当用户触发 submit/order 操作时以 DB 结束。

如果您必须在每次数量变化时更新您的数据库,那么您也必须在前端更新同样的内容 state/redux-store。