Реагировать: переопределять состояние и отношения

#json #reactjs #rest #redux #single-page-application

#json #reactjs ( реакция ) #остальное #сокращение #одностраничное приложение #reactjs #переопределение

Вопрос:

Я разрабатываю приложение с реактивным интерфейсом администратора. Я использую Redux для хранения состояния приложения, в основном статуса вызова API и объектов домена. Модель предметной области содержит дюжину типов сущностей, а объем данных очень мал.

Я хотел избежать вложенности и сохранить нормализованное состояние, чтобы избежать циклических ссылок. Я разработал REST API для возврата данных в нормализованном виде. В настоящее время структура состояния выглядит следующим образом:

 {
  Foo: {
     byId {
       1: { id: 1, ... },
       2: { id: 2, ... },
       ...
     },
     isLoading: false
     isError: false
  },

  Bar: {
     byId {
       1: { id: 1, fooId: 1, ... },
       2: { id: 2, fooId: 2, ... },
       ...
     },
     isLoading: false
     isError: false
  },
  ...
}
  

В основном состояние отражает базу данных. Теперь ответственность за выполнение «соединений» с этими данными лежит на компоненте пользовательского интерфейса. Вот псевдопример:

 // Redux connect omitted
FooListingComponent extends Component {

  // Redux-thunk actions
  componentDidMount() {
    this.props.getFoos() 
    this.props.getBars()
  }

  // Props comes from redux
  // Loading and error handling omitted
  render() {
    return (
      <div>
        { this.props.foos.map(f =>
          <Foo bars={this.props.bars.filter(b => b.fooId === f.id)} />) 
        }
      </div>
    )
  }
}
  

Подходит ли это решение в целом, или мне следует пересмотреть логику объединения и, возможно, сформировать состояние на более детальном уровне либо на уровне хранилища Redux, либо на уровне компонента?

Комментарии:

1. Сохраните свою логику в хранилище Redux. Как написано на странице React Redux, вы должны использовать mapStateToProps для изменения формы данных из хранилища. Вот ссылка react-redux.js.org/using-react-redux /…

2. @Dominik Targosz Не могли бы вы показать мне пример? Обратите внимание, что в моем примере FooListingComponent перечисляет несколько Foo. Должен ли я извлекать связанные столбцы внутри самого компонента Foo во время монтирования? Или вы имеете в виду, что я должен группировать столбцы по foos в хранилище redux?

3. Возможно, вы захотите рассмотреть возможность использования шаблона выбора gist.github.com/abhiaiyer91/aaf6e325cf7fc5fd5ebc70192a1fa170 , который позволяет вам реорганизовать способ хранения состояния без изменения сопоставлений повсюду. Он также позволяет кэшировать вычисляемые поля, такие как с github.com/reduxjs/reselect