Вышел Astro 3.2 с улучшениями view transitions и интеграций:
- Control the browser history stack
- Trigger page navigation via JavaScript
- Route announcer for screen readers
- Dynamically add integrations
Чтобы воспользоваться новыми возможностями view transitions, установите последнюю версию Astro. Обновиться до Astro 3.2:
npm install astro@latestpnpm upgrade astro --latestyarn upgrade astro --latestHistory Replacement on Links
Теперь можно настроить отдельные ссылки так, чтобы при навигации не добавлялась новая запись в историю браузера. Добавьте атрибут data-astro-history="replace" к любому <a>, и Astro использует history.replaceState. Удобно для меньшего числа кликов «назад» или чтобы не возвращать на страницы вроде подтверждения формы.
<a href="/toggle" data-astro-history="replace">Toggle me</a>JavaScript Navigation API
Теперь можно запускать навигацию из клиентского JavaScript через API navigate(). Раньше переходы происходили только по клику на якорные ссылки. С новым API вы полностью контролируете момент навигации.
import { navigate } from 'astro:transitions/client';
// Navigate to the selected option automatically.document.querySelector('select').onchange = (ev) => { let href = ev.target.value; navigate(href);};Также доступен контроль стека истории через опцию history — как у атрибута data-astro-history:
import { navigate } from 'astro:transitions/client';
navigate(href, { history: 'replace'});Route Announcer
Роутер View Transitions теперь объявляет маршруты. При переходах в классическом MPA вспомогательные технологии озвучивают заголовок страницы после загрузки. При клиентской маршрутизации это не происходит автоматически, и пользователи этих технологий не узнают о смене страницы.
Route announcer view transitions запускается после astro:page-load и ищет <title> страницы. Если не найден — fallback на первый <h1> или pathname. Рекомендуем всегда включать <title> на каждой странице для доступности.
Подробнее о доступности — в документации View Transitions.
Dynamically Added Integrations
Интеграции теперь могут динамически добавлять и настраивать другие интеграции при setup. Это позволяет авторам умнее объединять интеграции для пользователей.
В примере кастомная интеграция проверяет, настроен ли уже @astrojs/sitemap. Если нет — добавляет sitemap-интеграцию Astro с нужными опциями:
import sitemap from '@astrojs/sitemap';import type { AstroIntegration } from 'astro';
const MyIntegration = (): AstroIntegration => { return { name: 'my-integration',
'astro:config:setup': ({ config, updateConfig }) => { // Look for sitemap in user-configured integrations. const userSitemap = config.integrations.find( ({ name }) => name === '@astrojs/sitemap' );
if (!userSitemap) { // If sitemap wasn't found, add it. updateConfig({ integrations: [sitemap({ /* opts */ })], }); } }, };};More
В релизе также исправления и функции интеграций. См. release notes.
