#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