对象更新时,ngrx存储不更新订阅

时间:2019-01-31 03:12:33

标签: angular typescript ngrx-store

现在我知道还有类似的问题herehere,但它们只给了我一半的答案

基本上我的减速器文件中发生了什么,我有一个像这样的更新方法

import * as UserActions from '../actions/user.actions';
import { UserDto } from '@shared/service-proxies/service-proxies';

export function userReducer(state: UserDto[] = null, action: 
UserActions.Actions) {
  switch (action.type) {
    case UserActions.SET_USERS:
        return action.payload;
    case UserActions.UPDATE_USER:
        if (state === null) { state = []; }
        let index = state.findIndex(x => x.id === action.payload.id);
        if (index !== -1) {
            state[index] = action.payload;
        } else {
            state.push(action.payload);
        }
        return state;
    default:
        return state;
  }
}

现在发生的事情是调用更新,更改状态并返回新状态,但是它没有触发我的状态订阅,现在从其他我可以收集到的问题中,这是因为“技术上”是相同的状态对象,如果某些对象已更改,在这种情况下如何触发我的订阅?

我试图像这样创建一个新变量,然后返回该变量,但它仍然认为它是同一对象

let newState = state;
return state

什么是最好的解决方案?

1 个答案:

答案 0 :(得分:0)

问题就如您所说的那样,您是在改变现有状态而不是创建新状态。在大多数情况下,您应该使用传播运算符返回新对象。

    Using sw As IO.StreamWriter = New IO.StreamWriter("C:\Users\dlawrence\Desktop\Fred.txt")
        Dim tags() As Integer = {1, 3, 6, 2, 6, 2}
        Dim max As Integer = tags(0)
        For i = 1 To tags.Count - 1
            If tags(i) > max Then
                max = tags(i)
            End If
            sw.WriteLine(tags(i).ToString) 'EDIT moved this out of the If
        Next
    End Using