5

我正在使用@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确实为我们提供了一些很酷的帮助来更新项目,但似乎(从我在文档中看到的)仅限于更新整个实体。

但是,当用户切换“喜欢”按钮时,我希望在我的减速器中仅state.entities[2].likes使用响应更新该属性。

关于如何解决这个问题的任何想法?

4

2 回答 2

12

因为你的状态是不可变的。您需要更新所有实体。@ngrx/entity 附带一些帮助程序,可用于更新 1 个实体。在您的情况下,您需要使用 updateOne 方法。https://ngrx.io/guide/entity/adapter

它看起来像这样:

adapter.updateOne(
{
  id: 2,
  changes: {...state.entities[2], likes: value}
},
state
);
于 2019-05-03T15:22:50.877 回答
8

您可以像@Remi 提到的那样手动进行更改,也可以使用以下map方法:

 const newState = adapter.map(
      book =>
        book.title === TheGreatGatsby.title
          ? { ...book, name: 'foo' }
          : book
      state
    );
于 2019-05-03T16:16:35.247 回答