В моем приложении у меня есть одна основная модель, назовем их users
.У меня есть модуль users
и подмодуль внутри него, который называется list
.
При использовании конечной точки API я возвращаю 10 пользователей в виде массива пользователей.Для каждого пользователя я динамически регистрирую модуль user
для каждого модуля list
в users
, используя id
в качестве ключа.
this.registerModule(['users', 'list', user.id], UserModule);
Затем отправляю некоторые действия для гидратацииданные в моем магазине.Это все отлично работает.
У меня есть геттер, который анализирует модуль list
(объект, который содержит id
как ключи, указывающие на user
) в массив пользователей.Это выглядит примерно так:
users: (state) => {
const users = Object.keys(state.list).map(key => state.list[key]);
return users;
}
Проблема
Когда vuex
динамически регистрирует отдельных UserModule
, он упорядочивает их в модуле list
по алфавиту, а не по порядку.в котором модули регистрируются.Это проблема, потому что я хочу, чтобы массив пользователей был в том же порядке, в котором они поступают из API.
Пример
Если конечная точка возвращает 2 пользователей, таких как:
[
{ id: '3', name: 'Bob'},
{ id: '1', name: 'Tom'}
]
Тогда модуль списка будет выглядеть следующим образом:
state: {
list: {
1: { id: '1', name: 'Tom'},
3: { id: '3', name: 'Bob'}
}
}
И получатель users
вернет:
[
{ id: '1', name: 'Tom'},
{ id: '3', name: 'Bob'},
]
Моё предварительное решение - ввестиСвойство order добавляется в каждый модуль по мере его использования, а затем сортируется в получателе по этому свойству order.Это не очень хорошо, потому что я чувствую, что добавляю цикл для сортировки без причины.
Вопросы
- Есть ли способ заказать динамически регистрируемые модули, так как онивходить, а не в алфавитном порядке по ключу?
- Кто-нибудь может придумать лучшее решение для этой проблемы, кроме введения свойства "order"?