javascript - 从直接链接将 redux 项加载到状态

标签 javascript reactjs redux react-redux

这是一个“最佳实践”问题,因为我不清楚处理这种情况的正确方法。

情况是我有一个书店应用程序,其中包含一个 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 个组件

  1. BooksHome对于 /books/
  2. 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 中获取它并显示它。

必须做的事情:

  1. fetchBooks必须在 BooksHome 内发货但不在App
  2. 同路fetchSingleBook必须在 SingleBook 内发货

用这种方法优化的东西:

  1. 我们不需要获取所有书籍来显示一本书。
  2. 当图书数据在 state.bookstore.books 中可用时,我们不需要重新获取图书数据。

希望对您有所帮助🤝

关于javascript - 从直接链接将 redux 项加载到状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67943891/

相关文章:

reactjs - 如何使用 redux-form 从状态初始化 FieldArray?

javascript变量到jQuery对象

javascript - 如何更改kinetic js中一组节点的颜色?

javascript - React-Select:向输入添加自定义数据属性

reactjs - 返回 React 组件的 Promise 的 Typescript 类型声明

reactjs - 为什么 "import { React } from ' react ';“不起作用?

javascript - 饼图不使用外部 json 文件绘制 - extjs

javascript - 这就是范围的全部吗?

javascript - 使用 typescript 强类型化 react-redux connect

javascript - 基于状态在 Redux 中调度