Pull to refresh

Comments 21

Как по мне vue 2 с vue-class-component как-то по изящнее выглядит.

Тут с одной стороны согласна. Выглядит достаточно приятно, но vue3 уже совсем в другую сторону уходит, поэтому что предлагают тем и пользуемся)

Так с vue 3 vue-class-component тоже можно завести. Но новый проект уже без него начал делать.
Не рассматривали вариант поконтрибьютить и допилить vue-class-component?

на самом деле нет, пока не думали об этом в силу нехватитки ресурсов)

Уточнение по поводу пропсов: toRefs нужен для того, чтобы сделать пропсы реактивными, так как при const { exampleProps } = props реактивность потеряется. В любом случае в setup они доступны в объекте props. Например props.exampleProps

да, все так, по сути они становятся теми же рефами (реактивными)

Во втором примере лучше использовать reactive, а не ref для объекта.

nuxtjs/composition-api - примеры кода буду показывать с использованием данной библиотеки. В базе она использует тот же vuejs/composition-api и добавляет ряд своих методов для интеграции с nuxt.

@JuliWolf
Последняя версия nuxtjs/composition-api тянет напрямую из Vue. Обновите nuxtjs/composition-api до последней версии и Vue до 2.7, б0льшая часть импортов уйдет, бандл станет весить меньше.

setup(props) { ... }

Возвращать пропсы из setup не нужно. Они и так будут доступны в template.

Возвращать из setup ничего не нужно, если использовать синтаксис <script setup lang="ts"></script>. Исключением являются composables. Почему не используете?

setTimeout

Можно использовать useTimeoutFn() из https://vueuse.org/shared/useTimeoutFn/, тогда тянуть хуки из Vue и clearTimeout делать не нужно.

Pinia, Render functions, VueUse не используете на проекте?

с учетом того что мы работаем в рамках nuxt2, который за собой тянет такие фишки на asyncData и fetch использовать setup не представляется возможным, но в целом да, если писать именно <script setup lang="ts"></script> то возвращать ничего не нужно.

vueuse это отдельная библиотека, и мы ее не используем. В целом стараемся как можно меньше библиотек тянуть если нет большой необходимости.
На pinia будем переходить не все сразу, в основном проекте пока vuex

Мы один из проектов изначально делали на vite +vue3 + pinia, когда пробовали что такое vue3 вообще. Получилось очень симпатично

с учетом того что мы работаем в рамках nuxt2, который за собой тянет такие фишки на asyncData и fetch использовать setup не представляется возможным

А как это связано между собой? @nuxt/composition-apiпредоставляет useFetch() и useAsync(), да и тэги можно совмещать

<script lang="ts">legacy</script>
<script setup lang="ts">modern</script>

Я делал то же самое - мигрировал с Class Api Nuxt2 на Composition Api, и это не мешало мне использовать script setup синтаксис - наоборот, сильно помогло

vueuse это отдельная библиотека, и мы ее не используем. В целом стараемся как можно меньше библиотек тянуть если нет большой необходимости.

Всякий мусор - понятно, но эта можно сказать мастхэв для современных проектов на Vue, она поддерживает тришейкинг и упростит миграцию на Nuxt3, я потому и написал что заметил много лишнего кода, где можно было обойтись одной функцией

Я делал то же самое - мигрировал с Class Api Nuxt2 на Composition Api, и это не мешало мне использовать script setup синтаксис - наоборот, сильно помогло


А у вас заработали вызовы useAsync useFetch как они должны? У меня с этим были проблемы, замечала что ничто из этого на стороне сервера будето не вызывается

Касательно библиотеки, у меня есть мысля ее посмотреть на предмет реализации некооторых фич и скорее всего какие-то идеи оттуда забрать, но так чтобы прям всю забирать пока наврятли, но в целом на будущее учту)

да с ssr useFetch у накста проблемы тут

А у вас заработали вызовы useAsync useFetch как они должны? У меня с этим были проблемы, замечала что ничто из этого на стороне сервера будето не вызывается

Были проблемы только с этим, я думаю об этом и речь

❌ Top-level await in <script setup> (Vue 2 does not support async component initialization)

Решается комбинированными тэгами script с fetch/asyncData и script setup с остальной логикой. Я бы также предпочел запросы вынести во vuex/pinia, а в компонентах только вызовы дергать. И, кстати, vue meta тоже должен использовать обычный скрипт или можно взять useHead() из VueUse, в nuxt3 используется именно он, к слову о библиотеках (https://v3.nuxtjs.org/getting-started/seo-meta/). Резюмируя - ничто из этого реально не может мешать использованию сетапа

но так чтобы прям всю забирать

Я этого и не предлагал, либа тришейкается - тянутся только те функции, которые используете

А зачем идентификатор таймера сделан реактивным?

полностью поддерживаю, поправила

В целом хороший мануал, обязательно использую, если я когда-нибудь решусь переписать vuesax на Vue 3.

(12): добавлю, что defineEmits теперь гораздо важнее чем во vue2. Например, имеется компонент CustomButton типа `<template><button \@click="logAnalyticsAndClick"><slot /></button></template>`. Если defineEmits не определен, onClick будет вызываться дважды (один раз - emit из внутреннего метода logAnalyticsAndClick, второй - из-за inheritAttrs, onClick будет проброшен в корневой элемент у CustomButton).

(15): Еще defineExpose должен быть определен, и тогда типизация ref на child component может быть описана как const child = ref<InstanceType<typeof SomeChild>>()

(19): Можно еще через InjectionKey типизацию для provide/inject указать.

В прошлом году тоже начали переезд с vue2 + class-components + vuex на vue3 + pinia, сам переезд на vue3 занял где-то полтора месяца, еще полгода ушло на переписывание 800 классовых компонентов на composition api и примерно столько же на миграцию 100 модулей vuex на pinia. Удачи в этом нелегком деле ✊🏻

скажите, а зачем переписывать, options-API тоже работает же.

Sign up to leave a comment.

Articles