mag*_*gos 7 redux ngrx ngrx-entity
我开始使用ngrx/entity包,在那里我可以通过适配器管理存储。有一种addOne方法我想使用,但它将项目添加到集合的末尾。我想在开头添加一个。你能帮我解决这个问题吗?如何在开头添加项目EntityAdapter。
我如何创建实体适配器:
export const adapter: EntityAdapter<AssetTreeNode> = createEntityAdapter({
selectId: (model: AssetTreeNode) => model.Id
});
Run Code Online (Sandbox Code Playgroud)
减速器看起来像这样:
export function reducer(state: AssetListState = initialState, action: AssetListAction) {
switch (action.type) {
(...)
case ASSET_LIST_ADD_ITEM:
let assetToAdd: AssetTreeNode = Object.assign({} as AssetTreeNode,
action.payload.asset,
{ Id: action.payload.createdAssetId });
return adapter.addOne(assetToAdd, state); <--- I wanna add here at the end.
(...)
default:
return state;
}
}
Run Code Online (Sandbox Code Playgroud)
@ngrx/entity 团队没有提供正确的方法。答案之一提到使用排序比较器。但我相信使用排序比较器不是正确的方法。假设有两个点击操作,在一个操作中我们需要在下面附加项目,在其他操作中在顶部附加项目。在这里我们将再次遇到同样的问题。
我遇到了同样的问题,我的解决方案是当我们希望该项目位于列表顶部时重建列表。
const { selectAll } = myAdapter.getSelectors();
...
...
on(MyActions.addItem, (state, { item }) =>{
return myAdapter.setAll([item ,...selectAll(state)], { ...state})
}),
Run Code Online (Sandbox Code Playgroud)
on(MyActions.addItem, (state, { item}) =>{
return myAdapter.addOne(item, state)
}),
Run Code Online (Sandbox Code Playgroud)
sortComparer更改此行为的唯一方法是在创建适配器时使用文档。
export const adapter: EntityAdapter<User> = createEntityAdapter<User>({
sortComparer: (a: User, b: User) => a.name.localeCompare(b.name),
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |