Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

DevOps и инфраструктура

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер616
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Vue.jsВсе вопросы
Vue.jsMiddleТеория

Что такое Pinia? Чем она отличается от Vuex и почему является рекомендованным менеджером состояния для Vue 3?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Pinia — официальный стор для Vue 3, заменивший Vuex: нет mutations, нет namespaced-модулей, полный TypeScript inference, два стиля API (Options и Setup). Vuex 5 так и не вышел, поэтому Pinia стала рекомендованным решением.

Минимальный пример

// stores/counter.js
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0);
  const doubled = computed(() => count.value * 2);

  function increment() {
    count.value++;
  }

  return { count, doubled, increment };
});
// main.js
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';

const app = createApp(App);
app.use(createPinia());
app.mount('#app');
// MyComponent.vue (script setup)
import { useCounterStore } from '@/stores/counter';
import { storeToRefs } from 'pinia';

const store = useCounterStore();
const { count, doubled } = storeToRefs(store); // реактивная деструктуризация

Что такое Pinia

Pinia — официальный менеджер состояния Vue 3, пришедший на смену Vuex. Разработана членом команды Vue Эдуардо Сан-Мартином, включена в экосистему Vue как рекомендованное решение начиная с Vue 3.2+. Реализована поверх Composition API и Proxy-реактивности Vue 3.

Отличия от Vuex

  • Нет mutations. В Vuex изменение состояния требовало двух шагов: action → mutation. В Pinia состояние меняется напрямую внутри action или через store.count++.
  • Нет namespaced-модулей. Каждый store — отдельный вызов defineStore() с уникальным id. Импорт явный, нет строковых путей вида 'auth/login'.
  • TypeScript из коробки. Типы выводятся автоматически без ручных деклараций, в отличие от Vuex 4, где требовались дополнительные typed wrappers.
  • Devtools. Pinia интегрируется с Vue Devtools: timeline actions, time-travel для каждого store, hot-module replacement состояния.
  • Два стиля API. Options Store (похож на компоненты с state, getters, actions) и Setup Store (обычная setup-функция с ref/computed). Оба поддерживаются официально.

Options Store (альтернативный синтаксис)

export const useCartStore = defineStore('cart', {
  state: () => ({ items: [], total: 0 }),
  getters: {
    itemCount: (state) => state.items.length,
  },
  actions: {
    addItem(product) {
      this.items.push(product);
      this.total += product.price;
    },
    async fetchCart(userId) {
      const data = await fetch(`/api/cart/${userId}`).then(r => r.json());
      this.items = data.items;
    }
  }
});

Плагины Pinia

Pinia поддерживает плагины — функции, получающие контекст каждого store. Например, плагин персистентности:

import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);

Затем в store добавляется persist: true в опции defineStore.

Почему Pinia рекомендована для Vue 3

  • Vuex 5 (изначально планировавшийся для Vue 3) так и не вышел — Pinia стала его заменой.
  • Нативно использует Composition API, что делает код stores идентичным composables по стилю.
  • SSR-поддержка (Nuxt 3) работает без дополнительной конфигурации.
  • Тестирование: setActivePinia(createPinia()) в beforeEach — store изолирован для каждого теста.

Подводные камни

  • Деструктуризация store напрямую (const { count } = useCounterStore()) разрушает реактивность — нужен storeToRefs() для state/getters и обычная деструктуризация для actions.
  • Вызов store вне компонента (например, в router guard) должен происходить после app.use(pinia), иначе — ошибка «no active pinia».
  • В SSR каждый запрос должен создавать новый экземпляр pinia — общий singleton приведёт к утечке состояния между пользователями.
  • Прямое изменение store.$state в продакшене допустимо, но в тестах лучше использовать store.$patch() для читаемости.
  • При использовании Setup Store нет автоматического reset — нужно реализовывать $reset() вручную через store.$patch(initialState).
  • Circular imports между stores (store A вызывает useStoreB внутри action, store B — useStoreA) создают проблемы при холодном старте — рефакторить через lazy import внутри action.
  • HMR работает только если добавить блок if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(useStore, import.meta.hot)) }.

Частые вопросы на собеседовании

  • Как работает система реактивности Vue? Что изменилось между Vue 2 и Vue 3 (Proxy вместо Object.defineProperty)?
  • Что такое ref() и reactive() в Composition API? Когда использовать каждый?
  • В каких типах frontend-проектов Vue.js даёт реальный выигрыш, а где будет избыточен или неудачен?
  • В чём разница между вычисляемыми свойствами (computed properties) и watch'ерами? Когда использовать каждый?

Типичные ошибки

  • Перенести Vuex-привычку с mutations и писать в Pinia такой же boilerplate.
  • Деструктурировать стор без storeToRefs и терять реактивность.
  • Хранить во Pinia то, что должно быть локально в компоненте.
  • Прятать API-запросы в getters/computed вместо actions.

Что проверяет интервьюер

  • Знает базовый API defineStore + setup-style.
  • Может объяснить разницу с Vuex: нет mutations, лучше TS.
  • Понимает роль storeToRefs.
  • Помнит про SSR-гидрацию состояния.

Как вы знаете этот вопрос?

Проверить себя по теме Vue.js →

Источники

  • https://pinia.vuejs.org/introduction.html
  • https://pinia.vuejs.org/core-concepts/
←Предыдущий вопросКак работает система реактивности Vue? Что изменилось между Vue 2 и Vue 3 (Proxy вместо Object.defineProperty)?Следующий вопрос→Что такое `ref()` и `reactive()` в Composition API? Когда использовать каждый?

Связанные темы

Vue.jsArchitecturestate-managementvue-fundamentals