Если я правильно понимаю, вы хотите произвести один и тот же вывод, но получить данные о состоянии из разных мест для CountIceCream и CountDrink. Также действия различны для CountIceCream и CountDrink.
Итак, вот пример действия приращения для CountIceCream и CountDrink:
const incrementDrink = ()=>({type;INCREMENT_DRINK})
const incrementIceCream = ()=>({type;INCREMENT_ICE_CREAM})
Вот селекторы для получения данных подсчета для напитка и льда cream (это простой пример, в проектах я бы посоветовал использовать компонуемые селекторы для предотвращения дублирования)
const selectIceCreamCount = state => state.iceCream.count;
const selectIceDrinkCount = state => state.drinkCream.count;
Ваш контейнер может выглядеть примерно так:
const CounterContainer = function CounterContainer(
{ selector, up, down, remove },
props
) {
const dispatch = useDispatch();
const count = useSelector(selector);
const propsForPresentational = {
count
increment: () => dispatch(incement),
decrement: () => dispatch(decrement),
...props,
};
//a container should not return jsx,
// better create a presentational component instead
return <div>bunch of jsx</div>
};
Вот как вы можете создать контейнер для подсчета мороженого:
export const IceCreamCountContainer = React.memo(
function IceCreamCountContainer(props) {
return CounterContainer(
{
selector: selectIceCreamCount,
increment:incrementIceCream,
decrement:decrementIceCream,
},
props
);
}
);