Я разрабатываю приложение реакции типа GUI администратора.Я использую 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, либо на уровне компонентов?