привет! есть приложение на реакте + редакс.
стор организован следующим образом:
spoiler
const store = {
dictionary: {
1: {
id: 1,
title: 'post 1',
...
},
5: {
id: 5,
title: 'post 5,
...
},
},
blog: [1, 5, ...], // id постов которые отображаются в блоге (берутся из dictionary)
informer: [1, ....] // id постов которые отображаются в информере (берутся из dictionary)
}
То есть имеется ассоциативный "словарь" постов, в котором хранятся все посты. И для каждого раздела, который использует посты есть массив с id постов
Раньше посты для блога например получал так:
// В компоненте
const section = useSelector((state) => state.router.section); 'blog' или 'informer'
const dictionary = useSelector((state) => state.posts.dictionary);
const posts = useSelector((state) => state.dictionary[section]);
....
posts.map((post) => (<Post key={post.id} {...dictionary[post.id]} />);
потом подключил reselect и сделал следующим образом:
// В компоненте
const posts = useSelector(selectPosts);
...
posts.map((post) => (<Post key={post.id} {...dictionary[post.id]} />);
// selectActiveLooksList.js
export const selectSection = (state) => state.router.section;
export const selectDictionary = (state) => state.posts.dictionary;
export const selectPosts = createSelector(
[selectSection, selectDictionary],
(section, dictionary) => dictionary[section]
);
Почему мне кажется что вставил себе палки в колеса?
createSelector кэширует результат, что мне по сути не надо (для получения постов не используются вычисления по типу .map(), .filter() и тд, а просто идет обращение к массиву dictionary[section], и при каждой смене section результат будет по новой кешироваться.
Какая реализация более приемлема (первая или вторая)?