Представьте, что у нас есть следующая структура хранилища:
store: {
containers: {
1000: { /*some data*/ },
1001: { /*some data*/ }
},
items: {
2000: { /*some data*/ },
2001: { /*some data*/ }
},
mappings: {
1000: [1001],
1001: [2000, 2001]
}
}
Представьте, что контейнеры и элементы совместно используют некоторый фрагмент данных - назовем его pieceOfData
.И давайте представим, что в данный момент активен только один элемент.
pieceOfData
, извлеченный из / измененный в хранилище, определяется ближайшим «листом» в иерархии.
Таким образом, когда элемент 2000 активен, извлеченный pieceOfData
найденсначала проверяя его в элементе 2000, затем в контейнере 1001, затем в контейнере 1000. Если pieceOfData
не найден ни в одном из этих объектов, возвращается значение null.
Это достаточно тривиально, чтобы использовать селекторы.Сложная часть происходит, когда мы пытаемся отправить действие, чтобы изменить это pieceOfData
.Каждый контейнер и элемент редуктора совместно используют редуктор pieceOfData, который выполняет те же действия.Таким образом, при нормальных обстоятельствах отправка приведет к изменению каждого pieceOfData
.
Как тогда можно убедиться, что правильный редуктор pieceOfData
обрабатывает действие?
Одним из решений является отправка идентификатора вместе с диспетчерским вызовом, что означает, что когда я получу pieceOfData
, он также должен будет вернуть этот идентификатор.Но в идеале я бы хотел этого избежать, поскольку компонент, связанный с обновлением pieceOfData
, не должен знать, что такая иерархия существует.