обработка сложных моделей с помощью ngrx - PullRequest
1 голос
/ 15 марта 2019

Я заинтересован в реализации инфраструктуры 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 для управления состояниемГильдии и государство игроков.Оба рассматриваются отдельно в приложении, потому что игроки могут считаться «соло»;Гильдии [] и Игроки [].

Мой вопрос (и, надеюсь, это имеет смысл), насколько глубоко в этих моделях должно участвовать государственное управление?Например, мне понадобятся действия / селекторы / эффекты, чтобы пользователь мог взаимодействовать со всеми различными свойствами?Если пользователь хотел обновить игроков AttackType или SkillRules, требуется ли для этого действие / эффект?

Я думаю, использовать хранилища для управления двумя коллекциями на верхнем уровне, а мои компоненты будут брать объект /s из магазина и представить их пользователям.Вероятно, по крайней мере мне понадобится действие для UPDATE_GUILD и UPDATE_PLAYER.

1 Ответ

0 голосов
/ 15 марта 2019

Точнее, вам нужны эффекты в NgRx, чтобы изменить асинхронную часть запроса, в которой вы хотите обработать некоторые данные с сервера, прежде чем вносить окончательные изменения в хранилище.

Ваш вопрос:

Например, мне понадобятся действия / селекторы / эффекты, чтобы пользователь мог взаимодействовать со всеми различными свойствами?

Ответ не обязательно для всех из них. Вам определенно понадобятся действия для вызова редукторов, которые изменят ваши приложения синхронными данными, например, если вы внесли изменения в маршруты по нажатой ссылке, это простой случай, который не требует эффекта, и просто редуктор хорош .

Но вам потребуется Действие в обоих случаях Эффекты или Редуктор для отправки вызова и выполнения этой операции.

Селектор необходим для считывания значения, поэтому, если вам нужно прочитать значения, вам нужно будет создать селектор для него. Если вам не нужно значение, не создавайте его.

Эффекты необходимы, когда у вас есть такая операция, как, например, информация getUserAccount, которая является асинхронным запросом, и как только она будет обработана в эффекте, эффект отправит действие в Reducer для передачи окончательного ответа, полученного от сервера, в состояние.

Решение заключается в том, что вам необходимо понять точное требование для внесения изменений в состояние и определить, должен ли запрос быть синхронным или асинхронным.

...