2016-08-26 66 views
0

我试图找出我的Redux Store处理列表的最佳方式。现在它看起来像这样:如何编写此商店结构?

Store = { 
    users: [], 
    posts: [], 
    lists: [], 
} 

我的问题是,这是列表数组。本质上,它是针对特定资源的分页列表商店,因此,例如:

lists: [ 
    { 
     id: 'users/43/posts', 
     items: [25, 36, 21] 
    } 
] 

由于我使用的URL作为ID,我的组件显示用户帖子的列表将到底是哪列表中显示的认识。现在有人告诉我说,这是一个非常糟糕的主意。我只想提供一些有关可能更好的建议。建议的另一种方法是:

users: [{ 
    id: 2, 
    posts: [ 
     { 
      url: 'users/2/posts', 
      items: [13, 52, 26], 
     } 
    ] 
}] 

所以我不明白,Redux如何知道在哪里保存这个列表?我必须在动作参数中指定要保存它的位置吗?

谢谢您的建议。

+0

为什么这是一个坏主意?这听起来像REST是如何工作的,除非我误解了这个想法...... – GreenAsJade

+0

@GreenAsJade所以我的朋友说这会很麻烦,当我尝试缩放时会给我带来麻烦。不过,我真的很喜欢这种方法,任何组件都可以很容易地访问它。 –

回答

1

嗯,从技术上来说,任何工作,如果你使它的工作!然而,第二种方法看起来更成熟。你不想使用URL作为ID。 ID应该是数字或特殊字符+数字序列。当您的应用程序增长时,您将需要规范化数据,即将ID存储在单独的数组中,并将对象数组转换为具有键作为ID的对象。从Normalizr

[{ 
    id: 1, 
    title: 'Some Article', 
    author: { 
    id: 1, 
    name: 'Dan' 
    } 
}, { 
    id: 2, 
    title: 'Other Article', 
    author: { 
    id: 1, 
    name: 'Dan' 
    } 
}] 

例子可以归到 -

{ 
    result: [1, 2], 
    entities: { 
    articles: { 
     1: { 
     id: 1, 
     title: 'Some Article', 
     author: 1 
     }, 
     2: { 
     id: 2, 
     title: 'Other Article', 
     author: 1 
     } 
    } 
    } 
} 

当你的应用程序的增长,你就会有多个减速器和子减速。你需要分割你的状态树的一个特定部分,等等。出于这个原因,有人可能会建议你以不同的方式存储你的状态。

但是,再次,任何工作,如果你使它的工作!祝你好运!

+0

重要的是要注意,这些列表中的某些没有id,因为它们是动态生成的(用户最近发布的列表),所以这就是我使用url的原因,因为它是最具识别性的字符串。 –

+0

@SebastianOlsen哦,好吧!所以我在我的项目中做的是我将自己的ID附加到没有自己的ID的对象。只需循环访问数组并添加另一个名为'id'的键并给它一个整数值。 – Mihir

+0

如何告诉React组件它应该查找哪个ID? –