我正在创建的应用程序有很多实体和关系(数据库是关系).为了得到一个想法,有25个以上的实体,它们之间有任何类型的关系(一对多,多对多).
该应用程序是基于React + Redux的.为了从商店获取数据,我们使用了Reselect库.
我面临的问题是当我试图从商店获得一个与其关系的实体时.
为了更好地解释这个问题,我创建了一个简单的演示应用程序,它具有类似的架构.我将重点介绍最重要的代码库.最后,我将包括一个片段(小提琴),以便与它一起玩.
我们有书籍和作者.一本书有一位作者.一位作者有很多书.尽可能简单.
const authors = [{
id: 1,
name: 'Jordan Enev',
books: [1]
}];
const books = [{
id: 1,
name: 'Book 1',
category: 'Programming',
authorId: 1
}];
Run Code Online (Sandbox Code Playgroud)
商店采用扁平结构,符合Redux最佳实践 - 规范状态.
这是书籍和作者商店的初始状态:
const initialState = {
// Keep entities, by id:
// { 1: { name: '' } }
byIds: {},
// Keep entities ids
allIds:[]
};
Run Code Online (Sandbox Code Playgroud)
组件组织为容器和演示文稿.
<App /> 组件充当Container(获取所有需要的数据):
const mapStateToProps = state => ({
books: …Run Code Online (Sandbox Code Playgroud)