Hướng
Một trình cung cấp bối cảnh giúp chuyển đổi các thành phần giữa hướng từ trái sang phải (LTR) và từ phải sang trái (RTL), nhờ đó các menu, thanh trượt và tab sẽ hiển thị đúng hướng trong tiếng Ả Rập, tiếng Do Thái và tiếng Ba Tư.
Thành phần DirectionProvider được dùng để thiết lập hướng văn bản (ltr hoặc rtl) cho ứng dụng của bạn. Điều này rất cần thiết để hỗ trợ các ngôn ngữ viết từ phải sang trái như tiếng Ả Rập, tiếng Do Thái và tiếng Ba Tư.
Đây là bản xem trước của thành phần ở chế độ RTL. Dùng bộ chọn ngôn ngữ để chuyển đổi ngôn ngữ. Để xem thêm ví dụ, hãy tìm phần RTL trên các trang thành phần.
Bọc nó quanh cây component một lần là mọi thành phần biết nhận hướng đọc — dropdown menu, slider, tab, tooltip — sẽ lấy hướng từ React context thay vì dò trong DOM. Được xây dựng trên tiện ích Base UI Direction Provider; nó không render ra gì và cũng không mang kiểu dáng riêng — phần viền dày và bóng đổ neobrutalist nằm ở chính những thành phần mà nó điều phối.
Nên dùng khi:
- Ứng dụng tiếng Ả Rập, Hebrew hoặc Ba Tư — cách điều hướng bằng phím mũi tên, cách canh popup và hành vi của slider đều đảo theo hướng đọc.
- Bộ chuyển ngôn ngữ — đổi
directioncủa provider cùng lúc vớidirtrên<html>khi người dùng đổi ngôn ngữ. - Trang có hướng đọc hỗn hợp — lồng một provider quanh một khối RTL (biểu mẫu nhúng, nội dung trích dẫn) bên trong ứng dụng LTR.
Cài đặt#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/direction.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/direction.json
Cài đặt các phụ thuộc sau:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Sao chép và dán đoạn mã sau vào dự án của bạn.
"use client"
import * as React from "react"
import { Direction } from "radix-ui"
function DirectionProvider({
dir,
direction,
children,
}: React.ComponentProps<typeof Direction.DirectionProvider> & {
direction?: React.ComponentProps<typeof Direction.DirectionProvider>["dir"]
}) {
return (
<Direction.DirectionProvider dir={direction ?? dir}>
{children}
</Direction.DirectionProvider>
)
}
const useDirection = Direction.useDirection
export { DirectionProvider, useDirection }
Cập nhật các đường dẫn import cho phù hợp với thiết lập dự án của bạn.
Cách dùng#
import { DirectionProvider } from "@/components/ui/direction"<html dir="rtl">
<body>
<DirectionProvider direction="rtl">
{/* Your app content */}
</DirectionProvider>
</body>
</html>useDirection#
Hook useDirection được dùng để lấy hướng hiện tại của ứng dụng.
import { useDirection } from "@/components/ui/direction"
function MyComponent() {
const direction = useDirection()
return <div>Current direction: {direction}</div>
}Khả năng truy cập#
DirectionProvider chỉ điều phối phần logic của các thành phần — nó không bao giờ đặt thuộc tính dir. Hãy luôn đặt cả dir trên <html> (hoặc trên phần tử bọc ngoài): trình duyệt, trình đọc màn hình và các thuộc tính logic của CSS đều xác định hướng đọc từ thuộc tính trong DOM, chứ không phải từ React context. Giữ hai thứ đó đồng bộ chính là điều làm cho một trang RTL vừa hiển thị đúng vừa đọc đúng.