Не вставил ли я себе палки в колеса, перейдя на reselect?

привет! есть приложение на реакте + редакс.
стор организован следующим образом:
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 результат будет по новой кешироваться.

Какая реализация более приемлема (первая или вторая)?
  • Вопрос задан
  • 409 просмотров
Пригласить эксперта
Ответы на вопрос 2
@twolegs
В вашей ситуации reselect избыточен - вам не нужно мемоизировать результаты селекторов. Это не палки в колеса конечно, но на текущий момент абсолютно лишнее.
Ответ написан
Комментировать
@markak
Frontend developer
В вашем случае никаких вычислений в селекторе не происходит, и, соответственно производительность не повышается. Вы просто кешируете то, что уже находится в словаре. Следовательно происходит утечка памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы