Проверяет понимание архитектуры Redux и возможности переиспользования селекторов между модулями.
В Redux селекторы — это чистые функции, которые принимают state и возвращают производные данные. Они помогают избегать дублирования логики и упрощают тестирование. Вопрос о вызове селектора одного модуля из другого возникает при проектировании крупных приложений, где state разбит на несколько слайсов.
Селекторы могут быть двух типов: глобальные (принимают весь state) и локальные (принимают только свой срез). Если селектор модуля написан как локальный, он ожидает на входе только свой под-объект state. Чтобы использовать его в другом модуле, нужно передать соответствующий срез из глобального state. Это делается через композицию: в другом модуле создаётся новый селектор, который сначала извлекает нужный срез, а затем вызывает локальный селектор.
Предположим, есть модуль users с селектором selectUserById, который принимает срез state.users и id:
// users/selectors.js
export const selectUserById = (usersState, id) =>
usersState.entities[id];В модуле posts нужно получить автора поста. Мы можем импортировать этот селектор и передать ему срез из глобального state:
// posts/selectors.js
import { selectUserById } from '../users/selectors';
export const selectPostAuthor = (state, postId) => {
const post = state.posts.entities[postId];
return selectUserById(state.users, post.authorId);
};Здесь selectPostAuthor использует селектор из другого модуля, передавая ему state.users. Это возможно, потому что селектор selectUserById не зависит от глобального state, а работает с переданным срезом.
reselect, которая поддерживает мемоизацию и упрощает композицию.Вызов селектора другого модуля — это нормальная практика, если селекторы написаны как чистые функции, принимающие срез state. Организуйте модули так, чтобы каждый экспортировал свои локальные селекторы, и комбинируйте их в других модулях через передачу нужного среза. Это сохраняет чистоту архитектуры и облегчает поддержку кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию