#javascript #ngrx #angular10
#javascript #ngrx #angular10
Вопрос:
Я работаю над ngrx в версии angular 10
В Reducer, хотел добавить действие, которое удалит пользователя
, пока я пробовал приведенный ниже код, но с ним возникла проблема:
ОШИБКА TypeError: не удается удалить свойство ‘1’ из [массива объектов]
Не понимая этого поведения, поскольку я только что попытался удалить элемент из массива по его позиции
Я отлаживал и видел, что он получает индекс определенного объекта в массиве
, получая ошибку с state.users.splice(indx, 1);
export interface State {
users: IProduct[],
error: string
}
export const initialState: State = {
users: [],
error: ''
};
export function reducer(state = initialState, action: UserActions): State {
switch (action.type) {
case UserActionTypes.DeleteUser:
const indx = state.users.findIndex(user => user.id === action.payload.data.id);
state.users.splice(indx, 1);
return {
...state
}
case UserActionTypes.LoadUsers:
return {
...state
}
case UserActionTypes.LoadUsersSuccess:
return {
...state,
users: [...state.users, ...action.payload.data],
error: ''
}
case UserActionTypes.LoadUsersFailure:
return {
...state,
users: [],
error: action.payload.error
}
default:
return state;
}
}
Ответ №1:
Наконец я получил решение
Я присвоил данные в новой переменной newState, а затем удалил объект из этого
case UserActionTypes.DeleteUser:
const index = state.users.findIndex(user => user.id === action.payload.data.id);
let newState = [...state.users];
newState.splice(index, 1);
return {
users: newState,
error:''
}
Я просто изменил приведенный выше код в данном сценарии
export interface State {
users: IProduct[],
error: string
}
export const initialState: State = {
users: [],
error: ''
};
export function reducer(state = initialState, action: UserActions): State {
switch (action.type) {
case UserActionTypes.DeleteUser:
const index = state.users.findIndex(user => user.id === action.payload.data.id);
let newState = [...state.users];
newState.splice(index, 1);
return {
users: newState,
error:''
}
case UserActionTypes.LoadUsers:
return {
...state
}
case UserActionTypes.LoadUsersSuccess:
return {
...state,
users: [...state.users, ...action.payload.data],
error: ''
}
case UserActionTypes.LoadUsersFailure:
return {
...state,
users: [],
error: action.payload.error
}
default:
return state;
}
}
Комментарии:
1. это то, что должно быть сделано при изменении массива или объекта в хранилище.