这是一个“最佳实践”问题,因为我不清楚处理这种情况的正确方法。
情况是我有一个书店应用程序,其中包含一个 books
列表,该列表作为 state.bookstore.books
存在。当访问者加载书店的索引页面时,将调度一个 thunk
操作,将用户集合中的所有 book
对象加载到 state.bookstore.books
数组。
在书店页面中,用户可以点击一本书,然后加载一个新页面,从状态 books
数组中提取 book
项目并显示详情。
我的问题是,如果用户直接访问书籍详细信息链接(例如“mysite.com/book/123”)而没有先访问主页,state.bookstore.books
数组为空,页面无数据显示。
我的问题是“正确”的方法是什么?我是否会在应用程序初始化时分派(dispatch) loadBookstore
操作来填充状态?我会为 book
创建一个新的 redux 特性吗?我是否会忽略查找状态下的 book
,而只是从服务器中获取特定的 book
记录?
我假设我做错了/实现了一个反模式,因为选择器不是为获取参数而构建的,所以看起来因为没有简单的方法从存储,那么我不应该这样做。
最佳答案
假设我们有 2 个组件
-
BooksHome
对于/books/
-
SingleBook
对于/books/:id
所以当用户访问/books/
路线,开火 fetchBooks(..)
加载书籍并将它们保存在 state.bookstore.books
中并在 BooksHome
中显示这些书籍
而当用户访问/books/:id
路线,开火 fetchSingleBook(..)
这将找到带有 :id
的图书项目在 state.bookstore.books
如果存在,则将其返回并显示在 SingleBook
中如果不存在,获取它,将其添加到 state.bookstore.books
并将其返回并显示在
SingleBook
.
解释:
当用户访问/books/123
时马上,state.bookstore.books
是[]
所以没有找到任何项目,所以我们将获取它、存储它并显示它。
当用户访问/books/
时(数据获取和存储)然后访问 /books/123
, state.bookstore.books
有一个 id:123
的项目所以找到了该项目,所以我们将从 state.bookstore.books
中获取它并显示它。
必须做的事情:
-
fetchBooks
必须在BooksHome
内发货但不在App
- 同路
fetchSingleBook
必须在SingleBook
内发货
用这种方法优化的东西:
- 我们不需要获取所有书籍来显示一本书。
- 当图书数据在
state.bookstore.books
中可用时,我们不需要重新获取图书数据。
希望对您有所帮助🤝
关于javascript - 从直接链接将 redux 项加载到状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67943891/