是否可以更改ngrx / entities中的id?

时间:2018-05-30 17:29:39

标签: javascript angular ngrx ngrx-entity

是否有必要在ngrx /实体中使用不会被更改的ID?我想使用字符串属性path作为id。这是独一无二的。但它可以改变。在这种情况下我应该使用uuid作为ID吗?

4 个答案:

答案 0 :(得分:4)

创建适配器时,您可以传入一个函数来覆盖默认的id选择:

export const adapter: EntityAdapter<Model> = 
  createEntityAdapter({
    selectId: (model: Model) => model.modelId,
});

答案 1 :(得分:0)

我们需要更新EntityAdapter中的ID,因为API返回唯一的ID,以备将来参考,而该ID在首次添加到商店时不可用。因此,您可以根据需要自行更改。

const updateSelectedRooms = new selectedRoomsActions.UpdateSelectedRooms(
            {
                entities: [
                    {
                        changes: {
                            id: mockResponse.data.rooms[0].roomId,
                            pricing: mockResponse.data.rooms[0].pricing,
                        },
                        id: '1234-5678',
                    },
                ],
            },
        );

答案 2 :(得分:0)

根据Entity Adapter的官方文档:

selectId:一种用于选择集合的主要ID的方法。当实体的主键为id

时可选

我认为它将解决与实体ID相关的问题。您还可以尝试使用实体适配器来实现要在实体上执行的所有功能,并且要向前迈进,您应该尝试@ngrx/data

答案 3 :(得分:0)

NGRX 在 entityAdaptor 中引入了 mapOne 函数。这可用于通过传递旧 ID 来更新具有不同 ID 的实体。

定义适配器

const updatesAdapter: EntityAdapter<ModelEntity> = createEntityAdapter<ModelEntity>();

在减速器中

...
on(Action.someUpdateAction, (state,
                                 {newEntity, oldId}): State => {
    return updatesAdapter.mapOne({
      id: oldId,
      map: (e: ModelEntity) => ({
        ...newEntity 
      })
    }, state);
  }),
...
相关问题