在我的数据库中,存储树结构的最有效方法是将子级作为键,并且将其作为父级值:
database: {
"cars": "objects",
"objects": false,
"electronics": "objects",
"Honda": "cars",
"BMW": "cars,
"Samsung": "electronics",
"Apple": "electronics"
}
数据库可以包含数千个孩子。
但是我需要以相反的方式使用它们,所以:
reversed: {
"objects": ["electronics", "cars"],
"electronics": ["Samsung", "Apple"],
"Samsung": [],
"Apple": [],
"cars": ["Honda", "BMW"],
"Honda": [],
"BMW": []
}
列表中的每个元素都将是一个JSX元素,并将呈现自身,因为它是递归的子元素(例如state.elements具有上述结构)。
const mapStateToProps = (state, ownProps) => {
const children = state.elements[ownProps.id];
return { children };
}
如果我将规范化的数据存储在redux中,并在mapStateToProps中进行处理,如果我们有成千上万的元素,它将在mapStateToProps中进行数千次处理,即使使用选择器,我也认为效率不高。
我们可以得到已经以相反方式处理的响应,但这会导致问题。如果我们要更改元素的父级,则需要获取当前父级,过滤其子级以排除目标元素,然后将其推入新的父级。
在规范化的结构中,我们只需要引用子代ID,并将其值设置为新的父代。因此,在规范化结构中修改数据要容易得多,但是在反向结构中修改数据要好得多。
(我认为)有三种方法:
这三种方法都有优点和缺点,但是最有效的方法是什么?
PS:我正在使用Firebase作为数据库,并且有子事件侦听器,在该子侦听器中分配了数据。