45 lines
2.0 KiB
Markdown
45 lines
2.0 KiB
Markdown
**Импорт функции defineStore из библиотеки pinia для создания хранилища**:
|
||
```
|
||
import { defineStore } from 'pinia'
|
||
```
|
||
**Импорт типа User из файла с типами '@/types'**:
|
||
```
|
||
import { User } from '@/types'
|
||
```
|
||
**Определение типа состояния для хранилища auth**:
|
||
```
|
||
type authState = {
|
||
currentUser: User | undefined;
|
||
};
|
||
```
|
||
В этом блоке определяется тип `authState`, который представляет состояние хранилища. `currentUser` может быть типа `User` или `undefined`.
|
||
|
||
**Начальное состояние хранилища**:
|
||
```
|
||
const defaultState: authState = {
|
||
currentUser: undefined,
|
||
};
|
||
```
|
||
Здесь устанавливается начальное состояние хранилища `authStore`, в котором `currentUser` равен `undefined`.
|
||
|
||
**Экспорт хранилища authStore с использованием defineStore**:
|
||
```
|
||
export const authStore = defineStore({
|
||
id: 'auth',
|
||
state: () => defaultState,
|
||
getters: {
|
||
isAuthenticated: (state) => state.currentUser !== undefined,
|
||
jwtToken: (state) => state.currentUser?.token,
|
||
},
|
||
actions: {
|
||
signIn(user: User) {
|
||
this.currentUser = user;
|
||
},
|
||
signOut() {
|
||
this.currentUser = undefined;
|
||
},
|
||
},
|
||
persist: true,
|
||
});
|
||
```
|
||
Здесь мы используем `defineStore` для создания хранилища `authStore` с определенными состоянием (`state`), геттерами (`getters`) для проверки аутентификации и получения токена, а также с действиями (`actions`) для входа и выхода пользователя. Флаг `persist: true` указывает, что состояние хранилища должно сохраняться между перезагрузками страницы. |