хотя если взять с редаксом, все логика вынесена с компонентов и у нас есть классы(нормально или прывычно выглядит диспатч) и функциональные компоненты(useSelector) то они режит глаз смотришь как спагетти тут так в другом месте подругому...
Тут ещё нежно определиться, нужно ли продолжать поиск по цепочке прототипов, если указанное свойство отсутствует у самого объекта. Оператор in продолжит поиск в прототипах, тогда как hasOwnProperty ограничится поиском только в самом объекте.