useSelectedLayoutSegment

useSelectedLayoutSegment هو hook مكون العميل (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.