Интуитивно я расцениваю мутации как low-level слой, к которому (как и к стейту) лучше не давать доступа извне (из компонентов). В связи с этим я создаю пару общих мутаций (например, SET_MENU_STATE) для обобщенного управления конкретной частью стейта; а частные случаи оформляю в экшены (например, MENU_OPEN, MENU_CLOSE). Удобно тем, что в экшене можно собрать несколько мутаций на нужные свойства стора, и есть единый слой входа.
Но не является ли это избыточным? Есть ли best practices по организации мутаций \ экшенов, помимо описанного в документации кейса (экшены для API-вызовов)?
Для правильного вопроса надо знать половину ответа
Мутации - строго синхронные короткие процедуры, содержащие только логику смены состояния.
Экшены - возможно асинхронные процедуры, относящиеся к бизнес-логике и вызывающие мутации для смены состояния.
Так что вы всё делаете правильно. Бизнес-логика - открыть меню. Для этого надо сменить состояние, установив для меню статус "открыто".
Если завтра вам понадобится перед открытием меню делать его предзагрузку с сайта, вы поменяете экшен, а мутация останется как есть.