是否有必要在 ngrx/entities 中有不会更改的 id?我想使用字符串属性path
作为 id。它是独一无二的。但它可以改变。在这种情况下我应该使用 uuid 作为 id 吗?
4007 次
4 回答
20
您可以在创建适配器时传入一个函数来覆盖默认的 id 选择:
export const adapter: EntityAdapter<Model> = createEntityAdapter({
selectId: (model: Model) => model.modelId,
});
于 2018-05-31T13:55:26.977 回答
4
我们需要更新 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',
},
],
},
);
于 2019-05-03T14:17:23.430 回答
0
根据实体适配器的官方文档:
selectId:为集合选择主 id 的方法。当实体的主键为 id 时可选
我认为它将解决与实体 ID 相关的问题。您还可以尝试 Entity Adapter 来实现您想要在实体上执行的任何功能,并且要更进一步,您应该尝试@ngrx/data
于 2019-12-30T13:47:18.677 回答
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);
}),
...
于 2021-01-12T13:55:09.447 回答