Я использую NGXS в качестве моего государственного менеджера.
У меня есть объект "menuItems", который заполняет мой компонент "sidenav":
export const menuItems: Array<MenuItem> = [
{
icon: 'assets/circle-logo.png',
label: 'Home',
route: '/home',
selected: false
},
{
icon: 'assets/circle-logo.png',
label: 'Customers',
route: '/customers',
selected: false
},
{
icon: 'assets/circle-logo.png',
label: 'Entries',
route: '/entries',
selected: false
}];
когда приложение загружается в первый раз, изображение в свойстве "icon" загружается нормально.
Состояние обновляется, когда я нажимаю на элемент из моей sidenav:
Затем в состояние отправляется индекс, чтобы изменить выбранное свойство на «true» и выделить элемент, как показано на рисунке выше.
Моя проблема в том, что когда я обновляю состояние «menuItems», «logo-image» снова перезагружается. Я немного "моргнул" на экране, когда изображение снова загружается.
Это код моего состояния sidenav:
import { State, Action, StateContext } from '@ngxs/store';
import { MenuItem } from '@shared/types';
import { menuItems } from '@components/sidenav/menu-items';
export class SelectMenuItem {
static readonly type = 'SelectMenuItem';
constructor(public itemIndex: number) {}
}
@State<Array<MenuItem>>({
name: 'menuItems',
defaults: menuItems
})
export class SideNavState {
@Action(SelectMenuItem)
selectMenuItem(ctx: StateContext<Array<MenuItem>>, action: SelectMenuItem) {
const { getState, setState } = ctx;
const { itemIndex } = action;
const state = getState();
const currentItem = state.findIndex(s => s.selected);
if (currentItem !== itemIndex) {
const newState = state.map((item, index) => {
if (currentItem > -1 && currentItem === index) {
item = { ...item, selected: false };
}
if (itemIndex === index) {
item = { ...item, selected: true };
}
return item;
});
setState(newState);
}
}
}
Правильно ли я обновляю состояние или есть обходной путь для этого поведения?