【发布时间】:2019-10-15 14:29:41
【问题描述】:
我对 React 有点陌生,并在我的 React/Redux/Firebase PWA 中寻找针对特定情况的最佳实践。现在,我关心的部分本质上是 Yelp API 的包装器。
我有一个主要组件,它在加载时(在 componentDidMount 内部)根据应用程序其他地方收到的用户偏好来查询 Yelp API。该组件还使用用户输入查询表单提交上的 API。它遍历来自两者的数据,并将道具传递给子组件。此视图看起来像是从 API 接收到的所有业务的列表。下面是一个示例:
"businesses": [
{
"rating": 4,
"price": "$",
"phone": "+14152520800",
"id": "E8RJkjfdcwgtyoPMjQ_Olg",
"alias": "four-barrel-coffee-san-francisco",
"is_closed": false,
"categories": [
{
"alias": "coffee",
"title": "Coffee & Tea"
}
],
"review_count": 1738,
"name": "Four Barrel Coffee",
"url": "https://www.yelp.com/biz/four-barrel-coffee-san-francisco",
"coordinates": {
"latitude": 37.7670169511878,
"longitude": -122.42184275
},
"image_url": "http://s3-media2.fl.yelpcdn.com/bphoto/MmgtASP3l_t4tPCL1iAsCg/o.jpg",
"location": {
"city": "San Francisco",
"country": "US",
"address2": "",
"address3": "",
"state": "CA",
"address1": "375 Valencia St",
"zip_code": "94103"
},
"distance": 1604.23,
"transactions": ["pickup", "delivery"]
},
// ...
],
如前所述,主组件将数据传递给子组件,子组件会呈现列表中的每个单个对象。该子组件还根据每个业务的 id 创建指向另一个组件的链接。现在,这个其他组件与单个子组件的外观完全相同,只是在不同的 URL 上。例如,主要组件是“/venues”,企业的单个页面是“/venue/E8RJkjfdcwgtyoPMjQ_Olg”。数据是从 Redux 状态(它是一个 HOC)中提取出来的,并过滤掉以找到该 id。
我遇到的问题是,当我在企业的单个页面上刷新页面时,Redux 状态被清除,因此无法正确呈现数据。为了尝试解决这个问题,我尝试让服务工作者缓存它需要的所有内容,但这不起作用。刷新最终只显示我创建的加载页面,因为它没有进行调用(这是预期的 - 不希望它这样做)并且它也没有从缓存中提取数据。
有没有更好的方法来完成在刷新后将数据一直获取到单个业务组件?还是缓存整个页面/API 响应的更好方法,以便在刷新时正确呈现?
我想我可以让它联系特定业务的 API,但我试图避免这种情况。
【问题讨论】: