2015-02-05 2 views
2

У меня есть один список предметов, и у меня есть div для отображения деталей элемента. Например,Поддержание сфокусированного объекта в списке под React + Flux architecture

-------------------------------------------- 
| Items List | Selected Item Detail  | 
-------------------------------------------- 
| Item A  | Item C is selected  | 
| Item B  | Item C is a cool   | 
| Item C*  |       | 
| Item D  |       | 
-------------------------------------------- 

И мои компоненты:

- AppContainer 
    - Item List 
    - Item 
    - Selected Item Detail 

AppContainer имеет следующие статы

  • allItems
  • selectedItemId

Вот мой вопрос: правильная реализация?

  1. Должен ли я поддерживать selectedItemId (целое число) в AppContainer, и найти соответствующий пункт, ИО при прохождении выбранного элемента выбранного элемента Деталь?
  2. Или я должен сохранить selectedItem (объект) как состояние и передать его в Выбранный элемент Деталь напрямую?
  3. Должен ли я хранить selectedItem или selectedItemId в магазине Flux? (учитывая, что я сохраняю allItems в магазине после использования Flux в своей заявке.)

Спасибо.

ответ

3

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

Должен ли я поддерживать selectedItemId (целое число) в AppContainer и найти соответствующий пункт, ИО при прохождении выбранного элемента Selected Item Detail? Или я должен сохранить selectedItem (объект) как состояние и передать его прямому элементу?

Я вообще считаю, что предпочтительнее, чтобы сохранить состояние как можно более компактным и получить данные, которые зависят от других данных, где это действительно необходимо. Существует также старый стандарт DRY «не повторяйте себя». Поскольку выбранный элемент может быть получен из набора всех элементов и индекса, я бы сохранил индекс, а не дополнительную копию элемента.

Должен ли я сохранить выбранный элемент или выбранный элемент в магазине Flux? (учитывая, я держу allItems в магазине после использования Flux в моем приложении.)

По тем же причинам, что и выше, я бы хранить идентификатор, а не копию элемента.

+1

Спасибо, что ответили. Во втором вопросе моя точка зрения заключается в том, что «если я сохраню идентификатор, то должен ли я сохранить его в магазине или в собственном состоянии компонента?». – lazywei

+2

Похоже, что использование состояния компонента обычно обескураживается при использовании потока, но есть некоторые исключения, такие как входы форм, где имеет смысл удерживать его в привязке к компоненту. Это в основном вопрос о том, представляет ли он «состояние приложения», то есть это бит состояния, потенциально относящийся к другим компонентам, кроме того, где он возникает? В этом случае это так, поскольку вы выбираете ID в Item или ItemList, но он используется SelectedItemDetail, поэтому я бы сохранил его в магазине. –

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