2015-10-20 5 views
0

Я создаю приложение с флюсом и React, который является своего рода в игре ... и это приложение имеет 3 магазина:Flux сохраняет изменения других магазинов

GameStore -> содержит статус игры, как закончил, как много раз игрок выиграл, и этот материал

CounterStore -> Это счетный магазин, который запускается автоматически каждые 1 секунду, а компонент счетчика обновляется сам.

BlockStore -> это связано с игровыми компонентами, которые являются своего рода блоками, на которых пользователь может взаимодействовать.

Итак, всякий раз, когда я нажимаю на блок, я запускаю действие и получаю его в BlockStore. BlockStore делает какую-то магию и определяет, был ли щелчок на блоке правильным, если он был, он обновляет GameStore (сколько раз пользователь нажимал на правильный блок) и обновляет CounterStore (что увеличивает таймер для пользователя).

Кроме того, всякий раз, когда CounterStore получает значение 0, он также изменяет GameStore, чтобы установить, что пользователь потерял.

Это абсолютно неправильно, в моих магазинах они каким-то образом связаны ... Каждое действие меняет почти все магазины, но некоторые действия зависят от результата магазина, чтобы изменить другие магазины (это путает: S).

Я хочу получить мнение, правильно ли я делаю это, может быть, я должен поместить все в один магазин (что будет сложно поддерживать) или удалить некоторые магазины и обработать некоторые вещи в качестве компонента (например, счетчик).

Я потерян здесь.

ответ

0

Вытащил из https://facebook.github.io/flux/docs/overview.html:

Stores содержат состояние приложения и логику. Их роль несколько похожа на модель в традиционном MVC, но они управляют состоянием многих объектов - они не представляют собой одну запись данных типа ORM . Они также не похожи на коллекции Backbone. Более просто управляя коллекцией объектов типа ORM, магазины управляют состоянием приложения для определенного домена в приложении.

Ваш GameStore не должен содержать информацию для каждого блока. BlockStore должен содержать блоки и данные, относящиеся к отдельным блокам. Поскольку у вас есть другие данные, которые описывают общее состояние игры, я бы рекомендовал иметь второй магазин, предназначенный для хранения этого состояния (то есть StateStore, в котором будет храниться счетчик, в игре/закончен, оценка и т. Д.).

+0

Спасибо Alex за ваш ответ, на самом деле мой GameStore не содержит информации для каждого блока. Он содержит только информацию, связанную с игрой, например, если она закончена, или сколько раз пользователь выигрывал и тому подобное. Проблема в том, что я должен изменить GameStore в зависимости от данных, которые анализирует BlockStore ... если я щелкнул в правильном блоке, GameStore также должен измениться, чтобы обновить его состояние о том, сколько раз я нажал в Правильный блок –

+0

Кроме того, BlockStore также меняет CounterStore ... Если я нажимаю на правильный блок, я увеличиваю счетчик, иначе я его уменьшу. Я действительно не знаю, подходит ли это приложение, которое хорошо работает с Flux:/ –

+0

@MauricioSoares. Можно отправить действия с BlockStore для обновления значений в CounterStore/GameStore.Я все же предлагаю комбинировать CounterStore и GameStore в одном магазине. Если вы решите пойти по пути размещения всего в одном магазине, я бы выделил хранилище для всех данных и выделил любые методы/функции, которые мутируют данные на отдельные контроллеры. – Alex

Смежные вопросы