Как правильно использовать useSelector
1. Компактнее, понятнее, всего 1 вызов.
2. В 2 раза больше кода чем в первом варианте.
3. Почти как первый, но данные сначала помещаются в массив, а потом деструктурируются. Ненужная операция исключительно ради того, чтоб везде были квадратные скобочки, вкусовщина.
Если остро стоит вопрос производительности вынуждающий экономить на операциях, то стоит посмотреть во что трансформируются варианты 1 и 2 для прода, и уже там подсчитывать операции.
Как правильно использовать store.getState
Это функция, которая вернет текущий стейт. Это не хук, поэтому компонент не будет реагировать на изменения стейта. ХУк сможешь использовать только в компонентах, а getState позволит получить данные вне компонентов.