Применение паттерна observer в Redux и Mobx |
Паттерн "observer" известен наверное с момента появления самого ооп. Упрощенно можно представить что есть объект который хранит список слушателей и имеет метод "добавить", "удалить" и "оповестить", а внешний код либо подписывается либо оповещает подписчиков
class Observable {
listeners = new Set();
subscribe(listener){
this.listeners.add(listener)
}
unsubscribe(listener){
this.listeners.delete(listener)
}
trigger(){
for(const listener of this.listeners){
listener();
}
}
}
В redux-е этот паттерн применяется без всяких изменений — пакет "react-redux" предоставляет функцию connect
которая оборачивает компонент при и вызове componentDidMount вызовет subscribe()
метод у Observable
, при вызове componentWillUnmount()
вызовет unsubscribе()
а dispatch()
просто вызовет метод trigger()
который в цикле вызовет всех слушателей где каждый в свою очередь вызовет mapStateToProps()
и потом в зависимости от того изменилось ли значение — вызовет setState()
на самом компоненте. Все очень просто, но платой за простоту является необходимость вручную определять какие данные изменились внутри mapStateToProps()
.
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |