LowPrice is an Angular app that ships to iOS and Android from one codebase, so web habits apply, and the first of them is that state must be easy to reason about. There is no debugger on a phone in a shop aisle. NgRx gives every screen the same shape: an action says what happened, a reducer says what changed, and a selector says what the screen needs.
The store holds the catalog, search, shopping lists, the cart and orders. Selectors do the joining, so a product card does not know whether it came from search, from favorites or from a deal on the home screen. It asks for a product by id and receives the price in every chain, the price per kilo and the sale badge.
Effects talk to the API and nothing else does. That rule pays off when a list moves into the cart in one tap: the screen dispatches one action, and the effects do the rest, each able to fail on its own and report its own message. The cost is ceremony. For a screen with one field I would not reach for a store. For an app where five screens share the same products, I would reach for it again.