Реагируйте на то, что хранилище Redux «перезаписывается» действием

#reactjs #redux #signalr

Вопрос:

Я сталкиваюсь со странным поведением, когда один объект в состоянии полностью удаляется, когда действие обновляет другой. Объяснять:

У меня есть это начальное состояние:

 logs: [],
simpleWifi: {
    thermostats: [],
    fetchedThermostats: []
},
workspace: {
    userWorkspaces: [],
    focusedWorkspace: { id: 1 } as Workspace
}
 

Начальное состояние работает нормально, все присутствует. Однако, когда я (через концентратор SignalR) получаю рабочие пространства пользователей, focusedWorkspace удаляется из состояния. Я не уверен, почему это именно так, и почему это только удаляет это из штата?

Я определил рабочее пространство, которое имеет:

 const workspace: Workspaces = {
    userWorkspaces: [],
    focusedWorkspace: null
};
 
 export const workspaceReducer: Reducer<Workspaces> = (state: Workspaces | undefined, incomingAction: Action): Workspaces => {
    if (state === undefined) {
        return workspace;
    }

    const action = incomingAction as KnownAction;
    switch (action.type) {
        case "RECEIVE_ALL_USER_WORKSPACES":
            return {...state, userWorkspaces: action.workspaces };
        case "NEW_FOCUSED_WORKSPACE":
            return {...state, focusedWorkspace: action.focused };
        default:
            return state;
    }
};
 

По какой-то причине, когда RECEIVE_ALL_USER_WORKSPACES отправляется, focusedWorkspace становится неопределенным, а затем в конечном итоге полностью удаляется из состояния (даже изначально заданное значение по умолчанию).

EDIT1: Отправка узла SignalR выглядит следующим образом, при этом определяется рабочее пространство получателя:

 workspaceHub.on("ReceiveUserWorkspaces", (workspaces: Workspace[]) => {
        store.dispatch({ type: "RECEIVE_ALL_USER_WORKSPACES", workspaces } as ReceieveUserWorkspaces);
    });
 
 export interface ReceieveUserWorkspaces {
    type: "RECEIVE_ALL_USER_WORKSPACES",
    workspaces: Workspace[]
}
 

Список рабочих областей:

 [
  {
    "id": 1,
    "name": "Global",
    "category": "Global",
    "userID": null,
    "thermostats": []
  },
  {
    "id": 7,
    "name": "Test",
    "category": "Test",
    "userID": "asdf",
    "thermostats": []
  }
]
 

Комментарии:

1. Можете ли вы показать содержимое объекта RECEIVE_ALL_USER_WORKSPACES действия при его отправке?

2. @markerikson отредактировал вопрос