#redux #flux #state-management
Вопрос:
Допустим, у нас есть Posts
и Tags
это выглядит так:
posts: [{ id: 1, title: 'post 1', tags: [ { id: 1, text: 'tag1' }, { id: 2, text: 'tag2' } ], }]
В обычном методе нормализации это выглядело бы так:
posts: { byId: { 1: { id: 1, title: 'post1', tags: [1, 2], // lt;=== The list of tag ids is inside the post } }, allIds: [1] } postTags: { byId: { 1: { id: 1, text: 'tag1' }, 2: { id: 2, text: 'tag2' } } }
Но это значит, что posts
редуктор знает о tags
существовании, а ведь — пост может жить и без тегов.
Поэтому я подумал о том, чтобы хранить его таким образом:
posts: { byId: { 1: { id: 1, title: 'post1', // No tags here } }, allIds: [1] } postTags: { byId: { 1: { id: 1, text: 'tag1' }, 2: { id: 2, text: 'tag2' } }, tagIdsByPostId: { 1: { tags: [1, 2] } // lt;=== tags/post relation is here } }
Таким образом, в будущем, когда у поста также будет authors
, comments
, shares
и т. likes
Д. — Каждая функция будет иметь свой собственный редуктор , не касаясь основного posts
редуктора.
Я не смог найти ни одной статьи, пропагандирующей это. Это плохая практика? В чем заключаются недостатки?