When you declare your Vuex store, you need to create three main properties, state, mutations, and actions. Those properties act as a single structure, bounded to the Vue application through the $store injected prototype or the exported store variable.
A state is a centralized object that holds your information and makes it available to be used by the mutation, actions, or the components. Changing the state always requires a synchronous function executed through a mutation.
A mutation is a synchronous function that can change the state and is traceable, so when developing, you can time travel through all the executed mutations in the Vuex store.
An action is an asynchronous function, which can be used to hold business logic, API calls, dispatch other actions, and execute mutations. Those functions are the common entrance point of any change in a Vuex store.
A simple representation of a Vuex store can be seen in this chart: