برنامه نویسی

Next.js 15 رفتار پیمایش: یک راهنمای جامع

Next.JS 15 پیشرفت های چشمگیری را در کنترل رفتار ناوبری و پیمایش ایجاد کرد و به توسعه دهندگان گزینه های ریز و درشت تر برای ایجاد تجربیات کاربر صاف می دهد. این مقاله در اعماق این ویژگی ها غرق می شود و نمونه های عملی را برای مبتدیان و توسعه دهندگان پیشرفته ارائه می دهد.

درک رفتار پیمایش در Next.js

از نظر تاریخی ، چارچوب های وب هنگام حرکت بین مسیرها به پیمایش به بالای صفحه پرداخته اند. در حالی که این رفتار در برنامه های سنتی چند صفحه ای معنا پیدا می کند ، برنامه های وب مدرن اغلب نیاز به کنترل ظریف تری بر موقعیت پیمایش دارند.

next.js 15 این را با جدید می پردازد scroll خاصیت ، که به توسعه دهندگان کنترل صریح بر ترمیم پیمایش در هنگام ناوبری می دهد.

استفاده اساسی: scroll غرفه

با مؤلفه پیوند

ساده ترین روش برای کنترل رفتار پیمایش از طریق Link مؤلفه:

import Link from 'next/link'

// Default behavior: scrolls to top
<Link href="/products">View Products</Link>

// Prevents scrolling to top
<Link href="/products" scroll={false}>View Products</Link>
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کی scroll={false} مشخص شده است ، Next.js موقعیت پیمایش کاربر را پس از پیمایش حفظ می کند و یک تجربه یکپارچه ایجاد می کند.

با ناوبری برنامه ای

برای ناوبری برنامه ای ، scroll گزینه از طریق روتر در دسترس است:

import { useRouter } from 'next/navigation'

function FilterProducts() {
  const router = useRouter()

  const applyFilter = (filter) => {
    // Maintain scroll position when applying filters
    router.push(`/products?category=${filter}`, { scroll: false })
  }

  return (
    <button onClick={() => applyFilter('electronics')}>
      Filter by Electronics
    button>
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

موارد استفاده پیشرفته

اجرای پیمایش بی نهایت

در scroll={false} گزینه هنگام اجرای الگوهای پیمایش بی نهایت می درخشد:

import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'

function InfiniteProductList() {
  const [page, setPage] = useState(1)
  const [products, setProducts] = useState([])
  const router = useRouter()

  const loadMore = async () => {
    const newPage = page + 1
    // Update URL to reflect new page without scrolling
    router.push(`/products?page=${newPage}`, { scroll: false })

    // Fetch more products
    const newProducts = await fetchProducts(newPage)
    setProducts([...products, ...newProducts])
    setPage(newPage)
  }

  // Intersection Observer to detect when user reaches bottom
  useEffect(() => {
    // Implementation details...
  }, [])

  return (
    <div>
      {products.map(product => (
        <ProductCard key={product.id} product={product} />
      ))}
      <div ref={observerRef}>Loading more...div>
    div>
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اشکال چند مرحله ای

برای اشکال چند مرحله ای که در آن زمینه حفظ بسیار مهم است:

function CheckoutProcess() {
  const router = useRouter()
  const [formData, setFormData] = useState({})

  const goToNextStep = (step) => {
    // Save current form data
    localStorage.setItem('checkout-data', JSON.stringify(formData))

    // Navigate to next step without scrolling to top
    router.push(`/checkout/step-${step}`, { scroll: false })
  }

  return (
    <form onSubmit={() => goToNextStep(2)}>
      {/* Form fields */}
      <button type="submit">Continue to Shippingbutton>
    form>
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

به عناصر خاص بروید

در حالی که scroll={false} از پیمایش خودکار به بالا جلوگیری می کند ، ممکن است بخواهید پس از ناوبری به عناصر خاص بروید. می توانید ویژگی پیمایش را با useEffect قلاب:

import { useEffect, useRef } from 'react'
import { useSearchParams } from 'next/navigation'

function ProductPage() {
  const reviewsRef = useRef(null)
  const searchParams = useSearchParams()

  useEffect(() => {
    // Check if we should scroll to reviews section
    if (searchParams.get('section') === 'reviews' && reviewsRef.current) {
      reviewsRef.current.scrollIntoView({ 
        behavior: 'smooth',
        block: 'start'
      })
    }
  }, [searchParams])

  return (
    <div>
      <ProductDetails />
      <div ref={reviewsRef} id="reviews">
        <h2>Customer Reviewsh2>
        {/* Reviews content */}
      div>
    div>
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پیامدهای عملکرد

API رفتار پیمایش در Next.js 15 به طور مؤثر اجرا می شود ، اما ملاحظات وجود دارد:

  1. استفاده از حافظه: هنگام استفاده scroll={false}، next.js باید اطلاعات دولتی را در مورد موقعیت پیمایش حفظ کند ، که مقدار کمی از حافظه را مصرف می کند.

  2. بار صفحه اولیه: scroll PROP فقط بر ناوبری بین مسیرهای موجود در برنامه شما تأثیر می گذارد ، نه بار اولیه صفحه.

  3. چیدمان های تو در تو: در روتر برنامه ، این رفتار در مورد بخش های تغییر یافته مسیر ، با احترام به ساختار طرح بندی تو در تو اعمال می شود.

بهترین روشها

چه زمانی استفاده کنید scroll={false}

  • فیلتر یا مرتب سازی عملیات که در آن زمینه حفظ مهم است
  • رابط های Tabbed که در آن محتوا تغییر می کند اما طرح یکسان است
  • پیاده سازی های پیمایش بی نهایت
  • فرم های چند مرحله ای یا جادوگران

چه موقع باید رفتار پیمایش پیش فرض را حفظ کنیم

  • مسیر اصلی تغییر می کند که محتوای جدید باید از بالا مشاهده شود
  • هنگام انتقال بین بخشهای مختلف متفاوت برنامه شما
  • به دلایل دسترسی ، وقتی کاربران انتظار دارند از بالا شروع کنند

سازگاری مرورگر

NEXT.JS کنترل رفتار پیمایش در تمام مرورگرهای مدرن کار می کند. این پیاده سازی از API History استفاده می کند و در مرورگرهای قدیمی تر به طرز فجیعی باز می گردد.

مرمت پیمایش سفارشی

برای سناریوهای پیچیده تر ، ممکن است بخواهید منطق ترمیم پیمایش سفارشی را پیاده سازی کنید:

'use client'

import { useEffect } from 'react'
import { usePathname, useSearchParams } from 'next/navigation'

export function ScrollRestorationManager() {
  const pathname = usePathname()
  const searchParams = useSearchParams()

  useEffect(() => {
    // Save current scroll position for this route
    const saveScrollPosition = () => {
      const positions = JSON.parse(sessionStorage.getItem('scrollPositions') || '{}')
      positions[pathname + searchParams.toString()] = window.scrollY
      sessionStorage.setItem('scrollPositions', JSON.stringify(positions))
    }

    // Restore scroll position if available
    const restoreScrollPosition = () => {
      const positions = JSON.parse(sessionStorage.getItem('scrollPositions') || '{}')
      const savedPosition = positions[pathname + searchParams.toString()]

      if (savedPosition !== undefined) {
        window.scrollTo(0, savedPosition)
      }
    }

    // Add event listeners
    window.addEventListener('beforeunload', saveScrollPosition)
    restoreScrollPosition()

    return () => {
      window.removeEventListener('beforeunload', saveScrollPosition)
    }
  }, [pathname, searchParams])

  return null
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این مؤلفه می تواند در طرح شما گنجانده شود تا مرمت پیمایش سفارشی را در کل برنامه شما فراهم کند.

ادغام با سایر ویژگی های Next.js

با اجزای سرور

به یاد داشته باشید که scroll عملکرد PROP به جاوا اسکریپت سمت مشتری نیاز دارد. هنگام استفاده از مؤلفه های سرور ، برای رسیدگی به رفتار پیمایش باید یک بسته بندی مؤلفه مشتری ایجاد کنید:

// ServerComponent.jsx
export default function ProductList({ products }) {
  return (
    <div>
      {products.map(product => (
        <ProductItem key={product.id} product={product} />
      ))}
    div>
  )
}

// ClientWrapper.jsx
'use client'
import { useRouter } from 'next/navigation'
import ProductList from './ServerComponent'

export default function ProductListWrapper({ products }) {
  const router = useRouter()

  const handleProductFilter = (category) => {
    router.push(`/products?category=${category}`, { scroll: false })
  }

  return (
    <>
      <div className="filters">
        <button onClick={() => handleProductFilter('electronics')}>Electronicsbutton>
        <button onClick={() => handleProductFilter('clothing')}>Clothingbutton>
      div>
      <ProductList products={products} />
    >
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با حالت تعلیق و بارگیری

رفتار پیمایش به خوبی با مرزهای تعلیق کار می کند و موقعیت پیمایش را حتی در صورت بارگیری محتوا حفظ می کند:

import { Suspense } from 'react'
import LoadingSpinner from '@/components/LoadingSpinner'
import ProductList from '@/components/ProductList'

export default function ProductsPage() {
  return (
    <div>
      <h1>Productsh1>
      <Suspense fallback={<LoadingSpinner />}>
        <ProductList />
      Suspense>
    div>
  )
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پایان

Next.JS 15 گزینه های کنترل رفتار پیمایش راهی قدرتمند برای ایجاد تجربیات ناوبری بصری تر ارائه می دهد. با استفاده از scroll در هر دو Link ناوبری مؤلفه و برنامه ای ، توسعه دهندگان می توانند تعامل صاف و حفظ زمینه ای را انجام دهند که موقعیت کاربر را دقیقاً در صورت لزوم حفظ می کنند.

این که آیا شما در حال ایجاد یک سایت تجارت الکترونیکی با بارگیری محصول نامحدود ، فرم چند مرحله ای هستید یا فقط می خواهید احساس برنامه خود را بهبود بخشید ، این ابزارها بدون نیاز به پیاده سازی های پیچیده سفارشی ، سطح کنترل مناسب را ارائه می دهند.

از آنجا که برنامه های وب همچنان به سمت تجربیات بیشتر برنامه مانند تکامل می یابند ، ویژگی هایی مانند کنترل پیمایش برای حفظ زمینه کاربر و ایجاد انتقال یکپارچه بین حالتهای مختلف برنامه شما به طور فزاینده ای اهمیت می یابد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا