问题标签 [normalizr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
364 浏览

javascript - 我应该如何在我的 redux 存储中存储 isFetching/isLoading 数据?

我正在寻找一种在 redux 中为实体/数据存储 isFetching 的通用方式。目前我使用normalizr并将我的所有实体数据存储在实体哈希中。例如

我正在考虑在每个实体(即人员、订单...)对象上定义一个属性,以指定是否正在获取数据。唯一的问题是,如果您执行 Object.keys 之类的操作,您将在数组中返回一个 ids + isFetching 列表。为了克服这个问题,我想将属性设置为不可枚举。

我的数据相当复杂,我不只是有 2 个实体,我只是为示例进行了简化。我正在寻找一种可以在我的代码库中长期存在的解决方案。

这是一个好的解决方案吗?我不想仅仅为了存储元数据而创建一个新对象(尽管这是一个潜在的解决方案)。有更好或更常见的方法吗?

我知道这有点固执己见,但是 redux 问题指南将我指向 stackoverflow ...

注意我知道 Object.defineProperty 的兼容性问题。这是一个内部应用程序,每个人都使用最新版本的 chrome。

更新

redux store 中的潜在实现

0 投票
0 回答
311 浏览

reactjs - 如何使用 redux 为 Normalizr 中的多重嵌套 json 对象定义模式?

我有一个场景,我的 json 动态增长示例 json:

]

对象内的列表属性不断增长。

例如另一个场景:

当我看到他们提到的嵌套对象使用 normalizr 的 redux 文档时。但是如何为上述两种情况设计通用的规范化模式呢?

0 投票
0 回答
125 浏览

django-rest-framework - Django rest 框架和 normalizr

Django rest框架将A实例序列化为

normalizr (https://github.com/paularmstrong/normalizr)似乎想要一种格式

我可以更改 DRF 的默认 PrimaryKeyRelatedField 的序列化,但我想知道是否还有其他方法?

0 投票
1 回答
655 浏览

reactjs - React Redux - Normalizr - 从嵌套数据中选择 - 按 id 选择

所以有点卡在这个问题上。我收到了一份艺术品列表的回复,这是一个非常嵌套的回复。我已经使用 normalizr 库规范了这个响应。

您可以查看以下架构:

../schema.js

到目前为止,这工作得很好,数据正在被规范化,我在状态树中保存了以下响应:

所以现在我有一个组件可以获取这些数据并显示它。

../ArtCard.jsx

上述组件从状态树中获取整个画板对象,然后我们在其上运行 .map 以通过 id 获取画板。

我遇到的麻烦是关于last_art,我想显示完成最后一幅艺术的艺术家,我可以通过放置来获取id {props.item.entities.artboards[id].last_art},但是我无法使用它从lastArt获取信息,即这将类似于{props.item.entities.lastArt[id].date}last_art{props.item.entities.lastArt[id].artist}不是一个数组,而只是一个Number,这意味着我不能使用map它。

有一个更好的方法吗?在这种情况下我错过了什么?

0 投票
0 回答
57 浏览

redux - 使用预先扁平化的数组(即连接)规范化不同的集合

所有 normalizr 示例都集中在嵌套对象上,它们期望 API 结果如下所示:

但我实际上发现,您必须自己加入集合的以下格式是我最常处理的格式,我可以使用 normalizr 为我处理这种情况吗?

预期结果:

据我所知,Docs/github 没有提到它

0 投票
2 回答
5759 浏览

reactjs - 如何以最平坦的方式对 Redux 对象数组进行规范化?

谨防!这个问题可能令人困惑并且不相关,因为我对错误原因的假设是错误的,问题出在减速器中,而不是我表示数据的方式。

所以,这个问题的正确答案是jpdelatorre的问题,但 Joao的问题是关于 bug 本身。

假设我有来自服务器的 JSON 响应,它是一组嵌套对象。如何将其展平以使商店处理尽可能容易?我试过使用这样的 normalizr 工具:

但我相信我做错了,因为它没有多大帮助。存储仍然太复杂,因此我需要在 reducer 中使用一些递归的东西来更新状态。

此外,深度嵌套的状态也使得使用 react-redux 变得connect()非常困难,因为它只进行了浅层比较

响应的形状如下:

0 投票
0 回答
337 浏览

reactjs - 使用 redux-thunk 和 normalizr 从多个 API 调用创建数据对象

我正在使用redux-thunknormalizr创建数据模式。首先,我从 fetch 调用(未显示)中获取账单列表,然后对于响应中的每个项目,我使用账单的 ID 进行单独的 API 调用(如下所示)以获取与该账单相关的一些条款。外部提取响应中未提供该数据。

我正在为每个账单获取规范化的条款实体,在我发送状态之前,我将每个实体对象替换为包含相关账单列表的副本。

(下面的代码工作正常。)我的问题是:如果我用添加属性termEntities[key]的自身副本替换每个relatedBills,这算作变异吗?可以在调度之前弄乱 normalizr 实体数据,还是这是不好的做法?

谢谢!

0 投票
1 回答
609 浏览

reactjs - 规范化 React/Redux 应用程序的嵌套数据

我一直在尝试使用https://github.com/paularmstrong/normalizr为我的 redux 存储规范化嵌套数据

登录用户后,我会收到回复,其中包含他们的信息以及与其他数据类型的关系。

}

在阅读了很多教程之后,我相信我的标准化数据最好用这个形状来表示。

这是否意味着我为所有关系类型创建模式?

网站 书籍 电影 兴趣 美德 功能 优势 老师

然后是一个使用所有嵌套模式定义的关系模式?对于关系的所有类型,将在站点外的不同区域中引用。

例如)他们选择兴趣的页面,我会收到所有兴趣的回复。

我也将其标准化...

任何帮助将不胜感激,还有文章、教程、视频示例。

谢谢,

0 投票
2 回答
89 浏览

javascript - 更新 Redux/React 中 value = x 的状态

我的商店中有一组用户,设置如下:

我的项目正在从设置如下的服务器接收 JSON 数据:

我想找到user_id传递的数据与现有用户集匹配的位置user_id,并将分数更新score为传入的。

例如,如果reducer 收到{user_id:2, score:10}我如何将其更改score为原始状态下10用户ID 相等的位置。2在避免突变的同时,当然!

使用此功能的最佳方法是什么?归一化?洛达什?更新()?看起来很简单,我必须在这里遗漏一些明显的东西。谢谢。

0 投票
1 回答
2532 浏览

reactjs - 如何使用 Lodash 和 Normalizr 处理我的 redux 存储?

我只是不明白。这一切都是炼金术,让前端开发更容易的承诺掩盖了你必须混合的各种成分,以使这些承诺成为现实。要么我把错误的东西混在一起,要么我的歌声走调了。我不知道。

这将是一个混合的问题。也许把它全部输入会帮助我弄清楚我似乎在哪里弄错了。

我正在使用 normalizr 来平整我的 API 响应。我花了一段时间才弄清楚我应该使用这样的东西。在 redux 中与对象数组战斗有一段时间很有趣,但现在我正处于旅程的扁平化响应阶段。所以我的 API 响应返回一个人员列表,然后 normalizr 将其分解到存储中,例如:

为什么人的两把钥匙很深?我不知道。我无法让减速器以任何其他方式工作。我将通过我看到人们使用的示例进行说明。这是我的减速器(简化以显示相关部分):

好的,效果很好。甚至很棒!直到我想从 API 添加更多人。看,出于某种原因,如果我将更多的人放入这个减速器中,它只会替换所有内容而不是添加它们。好的,所以我做错了。更多研究提出了这个叫做 Lodash 的东西,它有一个合并功能。完美的!我没有合并商店中的结果,我必须替换它们(或者看起来就是这样)。所以让我们在 reducer 中使用 Lodash 来合并结果而不是替换它们。

好吧,它看起来不错,并且可以正常工作!结果被合并而不是被替换。这种方式还有一个额外的好处,就是不需要在减速器中添加额外的人键。所以我实际上去更改了很多代码,以不使用额外的人员密钥。直到我发现 Lodash 正在复制结果数组中的键。

很多这样的东西似乎真的很新。似乎人们仍在寻找“正确”的做事方式,以及哪些工具最有效。至少从搜索各种指南、自述文件和文档中看起来是这样。它们都告诉您使用不同的方法(而且它们最多只相隔几个月编写)。

我认为五角星、蜡烛和诵经在这一点上会同样有效,但我希望有人能在这里帮助我使用正确的成分。我正在使用 React,这导致需要 Redux,这导致需要 Normalizr,这显然导致需要 Lodash。那是对的吗?我在正确的道路上吗?如果不是,那么使前端状态管理成为一个可以忍受的过程的最少工具集是什么。从概念上讲,我喜欢我正在使用的东西,但是有很多陷阱,这很荒谬。

减速机:

第一个控制台日志是 reducer 使用一次后的状态。它有我向商店声明的最初一组人:

第二个控制台日志将是要添加的新人的有效负载:

那么第三个控制台日志应该是两种状态结合起来的吧?但它只是用 sally 和 ana 重复最后一个,并覆盖其他所有内容。