在我的第一个带有Redux的应用程序中,我试图按照建议将收藏集标准化。 这样,您只需要在一个地方更改实体即可。 (这对我来说是正确的)
最初,我成功地将数据数组标准化为实体的类数组对象,其中id为键
然后,我想在视图中列出实体,因此我不得不将其解析回数组。 另外,如果我想过滤我的实体,我需要真正的阵列。 这真的是正确的方法吗?
重新选择示例:
// As "id" for my images i use "uri"
imageEntities = {
uri1: {image...},
uri2: {image...},
....
}
// Selectors:
const imagesSelector = state => state.images;
// parse the Array-like-Object to an Array
const imagesArySelector = createSelector(
[imagesSelector],
images => {
let ary = [];
for (var key in images) {
if (images.hasOwnProperty(key)) {
ary.push(images[key]);
}
}
return ary;
}
);
// filter the Array to get only the new images
export const newImagesSelector = createSelector(
[imagesArySelector],
images => images.filter(image => image.isNew)
);
这真的是正确的方法吗? (从我所看到的到现在为止一切正常)
我认为可以做得更优雅。
我该怎么做:
import { createSelector } from 'reselect';
const providersSelector = state => state.entities.providers;
const subscribersSelector = state => state.entities.subscribers;
export const providersArraySelector = createSelector(
[providersSelector],
providers => Object.keys(providers).map(id => providers[id])
);
export const subscribersArraySelector = createSelector(
[subscribersSelector],
subscribers => Object.keys(subscribers).map(id => subscribers[id])
);
@itsmepetrov看起来好多了……谢谢。
因此,原则上我是正确的。 其他人?
然后,我想在视图中列出实体,因此我不得不将其解析回数组。
当使用数组更方便时,可以保留一个ID数组。 您需要针对分页等操作。 examples
文件夹中的real-world
示例可以做到这一点。
最有用的评论
我认为可以做得更优雅。
我该怎么做: