NGRX存储-服务器上的数据更改未应用于状态

时间:2020-02-11 12:29:30

标签: angular ngrx ngrx-store

我已经和NGRX一起工作了一段时间,最后发现了困扰我一段时间的问题。

本质上:我在服务器上更改的属性,然后由服务以ngrx效果返回的属性,在更新存储时未显示为差异,因此不会针对这些更改更新存储。在下面的示例中,我在前端更改了targetDepth。您会在硬编码中看到我确实证明了自己的命题,我希望商店会同时更新targetDepthtargetWidth

Redux State 我对方法的更改进行了硬编码,

 public async Task<IActionResult> Patch([FromODataUri]int key, [FromBody] PlanDTO expPlan)
{
    //DO a bunch of stuff

    //Save & error handling

    var result = GetPlan(key);
    result.FirstOrDefault().TargetWidth++;  //Dummy code for testing, not real logic
    return new ObjectResult(result);   //Return saved value
}

我的作用在这里:

    @Effect()
    editPlan$: Observable<Action> = this.actions$
        .pipe(ofType<Edit>(PlanActionTypes.Edit),
            switchMap(action => this.planService.editPlan(action.payload)),
            map((plan: any) => {

             // var changes = {...plan}  //--This line changes the behavior entirely

                return new EditSuccess({ id: plan.id, changes: plan});
            }),
            catchError(err => {
                this.toastr.error(`An error has occurred. Please reload the page before making any other changes.`);
                console.error(err);
                return of(new EditFail(err));
            })
        );

我可以通过添加var changes = {...plan}并将其传递给新问题。然后,仅使用服务器中的值更新存储,但是以某种方式跳过了UI中所做的更改。换句话说,如果我这样做,targetWidth会更新,但不会更新targetDepth。我都喜欢,但我不确定我缺少什么。谢谢。

编辑:我愿意分享更多的信息,但不想提供无关的信息

Edit2 相关的reducer

 export function reducer(
  state = fromState.initialState,
  action: PlanActionsUnion
): State {
  switch (action.type) {
       case PlanActionTypes.EditSuccess: {
          return adapter.updateOne(action.payload, state);
        }
    }

Edit3 意外行为修复。我不明白为什么。

预先更改服务以枚举IQueryable的结果似乎可以解决问题。

    var result = GetPlan(key);
    var resultFirst =  result.FirstOrDefault();
    var resultFirst.targetWidth++;
    return new ObjectResult(resultFirst);   //Return saved value

0 个答案:

没有答案