#angular #angular7 #ngrx #state-management
#angular #angular7 #ngrx #управление состоянием
Вопрос:
Я заинтересован во внедрении фреймворка ngrx в мое приложение, но у меня есть некоторые опасения по поводу того, какой объем работы это действительно требует. Вот модели, с которыми я работаю, как вы можете видеть, Модель гильдии — это, по сути, просто набор игроков. У меня есть планы по созданию гильдий, но пока это довольно пусто. Модель игрока состоит из некоторых свойств и набора навыков, и у каждого навыка есть SkillRule.
{
GuildName: "Guild",
Players:[{
PlayerName: "Player A",
PlayerId: 1,
AttackType: "Melee",
Skills:[{
SkillName: "Heal Self",
SkillType: "Magic",
SkillRules:{
RuleType:"HealRule",
Cost: 100,
FailChance:10
Boost: false
}
}]
}]
}
{
PlayerName: "Player A",
PlayerId: 1,
AttackType: "Melee",
Skills:[{
SkillName: "Heal Self",
SkillType: "Magic",
SkillRules:{
RuleType:"HealRule",
Cost: 100,
FailChance:10
Boost: false
}
}]
}
Все эти значения устанавливаются с помощью различных элементов пользовательского интерфейса, таких как текстовые поля, выпадающие списки, переключатели и т.д.
Что меня интересует, так это использование NGRX для управления состоянием гильдий и игроков. В приложении они рассматриваются отдельно, потому что игроки могут считаться «одиночными»; Гильдии[] и игроки[].
Мой вопрос (и, надеюсь, это имеет смысл), насколько глубоко в этих моделях необходимо задействовать управление состоянием? Например, понадобятся ли мне действия / селекторы / эффекты, чтобы пользователь мог взаимодействовать со всеми различными свойствами? Если пользователь хотел обновить тип атаки игроков или правила навыков, требуется ли для этого действие / эффект?
Я думаю использовать хранилища для управления двумя коллекциями на верхнем уровне, а мои компоненты будут извлекать объекты из хранилища и представлять их пользователям. Вероятно, мне, по крайней мере, понадобилось бы действие для UPDATE_GUILD и UPDATE_PLAYER.
Ответ №1:
Чтобы быть точным, вам нужны эффекты в NgRx, чтобы изменить асинхронную часть запроса, в которой вы хотите обработать некоторые данные с сервера, прежде чем вносить окончательные изменения в хранилище.
Ваш вопрос:
Например, понадобятся ли мне действия / селекторы / эффекты, чтобы пользователь мог взаимодействовать со всеми различными свойствами?
Ответ «нет» не обязательно для всех из них. Вам определенно понадобятся действия для вызова редукторов, которые изменят синхронные данные ваших приложений, например, если вы внесли изменения в маршруты при нажатии на ссылку, это простой случай, который не должен иметь эффекта, и просто редуктор подойдет.
Но в обоих случаях вам понадобится действие Effects или Reducer, чтобы отправить вызов и выполнить эту операцию.
Селектор необходим для обратного считывания значения, поэтому, если вам нужно прочитать значения, вам придется создать селектор для него. Если вам не нужно значение, не создавайте его.
Эффекты необходимы там, где у вас есть операция, подобная, например, получению информации об учетной записи пользователя, которая является асинхронным запросом, и как только это будет обработано в эффекте, эффект отправит действие в редуктор для фиксации конечного ответа, полученного от сервера, в состояние.
Решение заключается в том, что вам нужно понять точное требование для внесения изменений состояния и определить, должен ли запрос быть синхронным или асинхронным.
Комментарии:
1. Всем привет, для моего приложения в серверной части нет понятия «состояние». Состояние связано только с интерфейсом. Интерфейс передаст текущее состояние серверной части, а серверная часть создаст файлы на основе того, что было передано.
2. В вашем вопросе вы не упомянули ничего, связанного с серверной частью. Концепция состояния остается только для интерфейса. Вам следует кратко и точно прояснить свой вопрос с помощью end statement для того, что вам именно нужно.