在 React 中使用过滤器可扩展地管理表的状态

在 React 中使用过滤器可扩展地管理表的状态

不久前,我正在使用一个高度复杂的仪表板,该仪表板经常有很多表(典型的分页表),并且这些表有自己的过滤器,应用后,数据将被过滤和查看。我见过开发人员面临的一个常见问题是管理过滤器的状态,从而在 API 请求中发送以检索过滤结果,有些人将其保存在全局状态/上下文或本地状态中,但我相信我们有解决此问题的更好方法。

桌子

筛选

保存在全局状态/上下文 API 中的问题

只有当您真正需要在其他任何地方访问数据时,才将数据保存在全局状态中才有意义。一个案例是人们编写 API 请求并直接在那里访问过滤器值。这不是一个充分的理由,因为这是一种反模式。我们应该始终从拥有它的地方(过滤器组件)传递 API 所需的变量数据(在这种情况下是过滤器状态),这里是设置状态的组件。所以请不要在全局状态模式中保存所有内容(我求求你:P)。

与当地国家的问题

如今,在 React 中管理本地状态中的复杂对象是一件麻烦事。因为您的过滤器状态可能如下所示。

这甚至可能很复杂,因为嵌套可以达到任何级别。

也没有在 URL 中保存数据,例如。产品人员应用了一些过滤器,添加了搜索输入,现在需要将 URL 发送给其他人,希望他在打开它时会在屏幕上看到相同的结果。不是这样。由于 URL 并不真正了解实际拍摄表快照的状态。

更好的方法

更好的方法应该是使用搜索参数 API 在 URL 中保存数据。由于这允许屏幕上使用的过滤器也反映在 URL 上,这将允许人们在具有非常幸福体验的团队之间共享它。现在,URL 中刻有过滤器的数据。

但现在出现了如何保存它的问题?我们只是使用它的 stringify 方法将对象转换为 JSON 还是采取更好的方法。我相信这是个人的选择,但直接将字符串化对象保存到 URL 中看起来有点难看 IMO,不如让我们看看几个 JSON 压缩器库。

齐普森

齐普森 是一个非常用户友好和高性能的 JSON 压缩库(在运行时性能和由此产生的压缩性能方面)。用它压缩你的搜索参数(这也需要转义/取消转义和base64编码/解码它们)。

基地 64

Base64 也可以是你的选择,因为你真的不需要为 URL 的编码和解码安装一个单独的库。

我通常更喜欢 Base64 方法。它还使 URL 更加清晰,因为只是一个额外的 base64 字符串,URL 不会提供有关其内容的太多信息。

现在让我们来看看代码

作为我经常使用的实用程序,我更喜欢为它创建一个自定义挂钩。我将使用 反应路由器 V6 反应 16 .

在这里,我们使用了一个由 React Router 提供的实用程序钩子,称为 useSearchParams。与使用 params 对象和 setParams 实用程序的 useState 非常相似。

在这里,我们期望过滤器的初始值。

这样,只需在设置过滤器值的组件中导入钩子就可以将数据添加到 URL 搜索参数中。

此外,如果您的过滤器数据也在其他地方使用,请使用以下方法将其转换为单例挂钩 反应单件钩子 避免多个实例,因为过滤器每次都会不断重置。

http://localhost:8081/ops/audience-all?filter=eyJjYXRlZ29yeSI6W10sInRhZ3MiOltdLCJicmFuZHMiOltdLCJjb3VudHJ5IjpbXSwicHJvdmlkZXIiOltdLCJzaWduYWwiOltdLCJpbnNpZ2h0cyI6IiIsImNvcHlTdGF0dXMiOltdLCJvblBhZ2VTdGF0dXMiOltdLCJhcHByb3ZhbFN0YXR1cyI6W10sImNvdW50cnlHdWlkIjoiYmE4ZmYyNjctZmU1OS00YTY2LThkYzYtMTQ4MjdhNWM2MTY0Iiwic2VhcmNoQXVkaWVuY2VOYW1lIjoiIiwic2VsZWN0ZWRBdWRpZW5jZSI6W119

现在这就是过滤器是如何刻在 URL 中的。祝好运可扩展地管理过滤器。

最后,再见!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1494/02532916

posted @ 2022-08-29 16:05  哈哈哈来了啊啊啊  阅读(196)  评论(0编辑  收藏  举报