使用@ngrx/entity,如何更新项目数组
Using @ngrx/entity, how can I update an items array
我正在使用 @ngrx/entity
,这会创建如下所示的状态:
{
ids: [1, 2, 3],
entities: [
1: {id:1, title: "Some title", likes: {count: 1}},
2: {id:2, title: "Some title", likes: {count: 1}},
3: {id:3, title: "Some title", likes: {count: 1}}
]
}
@ngrx/entity
确实为我们提供了一些更新项目的好帮手,但似乎(从我在文档中看到的)仅限于更新整个实体。
但是,当用户切换 'Like' 按钮时,我希望在我的减速器中仅更新 state.entities[2].likes
属性 响应。
有什么想法可以解决这个问题吗?
因为你的状态是不可变的。您需要更新所有实体。 @ngrx/entity 附带了一些帮助程序,您可以使用它们来更新 1 个实体。在您的情况下,您需要使用 updateOne 方法。 https://ngrx.io/guide/entity/adapter
看起来像这样:
adapter.updateOne(
{
id: 2,
changes: {...state.entities[2], likes: value}
},
state
);
您可以像@Remi 提到的那样手动进行更改,或者您可以使用 map
方法:
const newState = adapter.map(
book =>
book.title === TheGreatGatsby.title
? { ...book, name: 'foo' }
: book
state
);
我正在使用 @ngrx/entity
,这会创建如下所示的状态:
{
ids: [1, 2, 3],
entities: [
1: {id:1, title: "Some title", likes: {count: 1}},
2: {id:2, title: "Some title", likes: {count: 1}},
3: {id:3, title: "Some title", likes: {count: 1}}
]
}
@ngrx/entity
确实为我们提供了一些更新项目的好帮手,但似乎(从我在文档中看到的)仅限于更新整个实体。
但是,当用户切换 'Like' 按钮时,我希望在我的减速器中仅更新 state.entities[2].likes
属性 响应。
有什么想法可以解决这个问题吗?
因为你的状态是不可变的。您需要更新所有实体。 @ngrx/entity 附带了一些帮助程序,您可以使用它们来更新 1 个实体。在您的情况下,您需要使用 updateOne 方法。 https://ngrx.io/guide/entity/adapter
看起来像这样:
adapter.updateOne(
{
id: 2,
changes: {...state.entities[2], likes: value}
},
state
);
您可以像@Remi 提到的那样手动进行更改,或者您可以使用 map
方法:
const newState = adapter.map(
book =>
book.title === TheGreatGatsby.title
? { ...book, name: 'foo' }
: book
state
);