useSelectedLayoutSegment

useSelectedLayoutSegment هو خطاف مكون عميل (Client Component) يسمح لك بقراءة مقطع المسار النشط المستوى الواحد أسفل التخطيط الذي يتم استدعاؤه منه.

هذا مفاهيم لواجهة المستخدم للتنقل، مثل علامات التبويب داخل التخطيط الرئيسي التي تغير النمط بناءً على مقطع الابن النشط.

'use client'

import { useSelectedLayoutSegment } from 'next/navigation'

export default function ExampleClientComponent() {
  const segment = useSelectedLayoutSegment()

  return <p>Active segment: {segment}</p>
}
'use client'

import { useSelectedLayoutSegment } from 'next/navigation'

export default function ExampleClientComponent() {
  const segment = useSelectedLayoutSegment()

  return <p>Active segment: {segment}</p>
}

معلومة مفيدة:

المعاملات

const segment = useSelectedLayoutSegment(parallelRoutesKey?: string)

useSelectedLayoutSegment يقبل بشكل اختياري parallelRoutesKey، مما يسمح لك بقراءة مقطع المسار النشط داخل تلك الفتحة.

القيم المُرجعة

useSelectedLayoutSegment يُرجع سلسلة نصية للمقطع النشط أو null إذا لم يوجد.

على سبيل المثال، بالنظر إلى التخطيطات وعناوين URL أدناه، سيكون المقطع المُرجع:

التخطيطعنوان URL المزورالمقطع المُرجع
app/layout.js/null
app/layout.js/dashboard'dashboard'
app/dashboard/layout.js/dashboardnull
app/dashboard/layout.js/dashboard/settings'settings'
app/dashboard/layout.js/dashboard/analytics'analytics'
app/dashboard/layout.js/dashboard/analytics/monthly'analytics'

أمثلة

إنشاء مكون رابط نشط

يمكنك استخدام useSelectedLayoutSegment لإنشاء مكون رابط نشط يغير النمط بناءً على المقطع النشط. على سبيل المثال، قائمة مشاركات مميزة في الشريط الجانبي لمدونة:

'use client'

import Link from 'next/link'
import { useSelectedLayoutSegment } from 'next/navigation'

// هذا المكون *العميل* سيتم استيراده إلى تخطيط المدونة
export default function BlogNavLink({
  slug,
  children,
}: {
  slug: string
  children: React.ReactNode
}) {
  // التنقل إلى `/blog/hello-world` سيرجع 'hello-world'
  // لمقطع التخطيط المحدد
  const segment = useSelectedLayoutSegment()
  const isActive = slug === segment

  return (
    <Link
      href={`/blog/${slug}`}
      // تغيير النمط بناءً على ما إذا كان الرابط نشطًا
      style={{ fontWeight: isActive ? 'bold' : 'normal' }}
    >
      {children}
    </Link>
  )
}
'use client'

import Link from 'next/link'
import { useSelectedLayoutSegment } from 'next/navigation'

// هذا المكون *العميل* سيتم استيراده إلى تخطيط المدونة
export default function BlogNavLink({ slug, children }) {
  // التنقل إلى `/blog/hello-world` سيرجع 'hello-world'
  // لمقطع التخطيط المحدد
  const segment = useSelectedLayoutSegment()
  const isActive = slug === segment

  return (
    <Link
      href={`/blog/${slug}`}
      // تغيير النمط بناءً على ما إذا كان الرابط نشطًا
      style={{ fontWeight: isActive ? 'bold' : 'normal' }}
    >
      {children}
    </Link>
  )
}
// استيراد مكون العميل إلى تخطيط رئيسي (مكون خادم)
import { BlogNavLink } from './blog-nav-link'
import getFeaturedPosts from './get-featured-posts'

export default async function Layout({
  children,
}: {
  children: React.ReactNode
}) {
  const featuredPosts = await getFeaturedPosts()
  return (
    <div>
      {featuredPosts.map((post) => (
        <div key={post.id}>
          <BlogNavLink slug={post.slug}>{post.title}</BlogNavLink>
        </div>
      ))}
      <div>{children}</div>
    </div>
  )
}
// استيراد مكون العميل إلى تخطيط رئيسي (مكون خادم)
import { BlogNavLink } from './blog-nav-link'
import getFeaturedPosts from './get-featured-posts'

export default async function Layout({ children }) {
  const featuredPosts = await getFeaturedPosts()
  return (
    <div>
      {featuredPosts.map((post) => (
        <div key={post.id}>
          <BlogNavLink slug={post.slug}>{post.title}</BlogNavLink>
        </div>
      ))}
      <div>{children}</div>
    </div>
  )
}

سجل الإصدارات

الإصدارالتغييرات
v13.0.0تم تقديم useSelectedLayoutSegment.