如何使用ngrx-entity更新实体的子集?

时间:2018-01-12 08:56:40

标签: angular ngrx ngrx-entity

我正在使用HTTP Patch请求更新一组实体到远程后端。来自后端的响应仅包括更新的实体(即,不是所有实体)。

我使用实体状态适配器设置我的reducer并使用function getPositions(box) { var $box = $(box); var pos = $box.position(); var width = $box.width(); var height = $box.height(); return [ [ pos.left, pos.left + width ], [ pos.top, pos.top + height ] ]; } function comparePositions(p1, p2) { var x1 = p1[0] < p2[0] ? p1 : p2; var x2 = p1[0] < p2[0] ? p2 : p1; return x1[1] > x2[0] || x1[0] === x2[0] ? true : false; } function checkCollisions(){ var box = $(".bomb")[0]; var pos = getPositions(box); var pos2 = getPositions(this); var horizontalMatch = comparePositions(pos[0], pos2[0]); var verticalMatch = comparePositions(pos[1], pos2[1]); var match = horizontalMatch && verticalMatch; if (match) { $("body").append("<p>COLLISION !!!</p>"); } } 来更新我的实体:

updateMany

虽然这会更新收到更新的实体,但它会删除后端未返回的所有其他实体。

有没有办法告诉ngrx只更新case settings.SettingsActionTypes.UpdateSettingsSuccess: { return { ...state, ...adapter.updateMany(action.payload.map((category) => Object.assign({}, {id: category.name, changes: category})), state), loaded: true, loading: false, } } 中包含的实体?

1 个答案:

答案 0 :(得分:4)

你不应该传播这么多次。

更新许多人将状态作为参数,你可以在那里使用你的传播。

return adapter.updateMany( 
   action.payload.map((category) => Object.assign({}, {id: category.name, changes: category})), 
   { ...state, loaded: true, loading: false }
);