是否有必要在ngrx /实体中使用不会被更改的ID?我想使用字符串属性path
作为id。这是独一无二的。但它可以改变。在这种情况下我应该使用uuid作为ID吗?
答案 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);
}),
...