Add a shared useControllableState hook
Maintainer thường phản hồi trong vòng 2 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Tái cấu trúc
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- react, typescript
- Lĩnh vực
- frontend
Hướng nghiên cứu
Bắt đầu trong packages/raystack/hooks và so sánh các mẫu controlled/uncontrolled trong sidebar-root.tsx, select-root.tsx và data-view.tsx. Đọc mô hình @radix-ui/react-use-controllable-state được tham chiếu, sau đó xác minh rằng Sidebar, Select và DataView sử dụng các ngữ nghĩa dùng chung một cách nhất quán.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
Components that support both controlled and uncontrolled usage each re-implement the controlled/uncontrolled merge by hand, with a slightly different shape every time. There's no shared hook for it in packages/raystack/hooks.
Current duplication
sidebar-root.tsx:128-129—const [internalOpen, setInternalOpen] = useState(defaultOpen); const open = providedOpen ?? internalOpen;select-root.tsx:113-122— same??pattern, duplicated again forsearchValuea few lines later.data-view.tsx:73-83— different style again: explicitisViewControlled = view !== undefinedboolean instead of??.
Components built directly on Base UI primitives (Checkbox, Switch, Tabs, Accordion, Dialog) don't have this problem — they get controlled/uncontrolled handling for free from Base UI. This only affects components with custom root logic.
Suggested approach
Add one useControllableState({ value, defaultValue, onChange }) hook to packages/raystack/hooks, modeled on @radix-ui/react-use-controllable-state. Migrate Sidebar, Select, and DataView onto it so all three follow the same merge semantics.
Notes
Found via a components.build practices audit (state management dimension).
- Ngôn ngữ chính
- TypeScript
- Star
- 69
- Fork
- 13
- Merge trung bình
- 3 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 24
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của raystack/apsara
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 2 ngày
-
DataView: don't offer select/multiselect filters with empty filterOptionsCó thể đã có người làm @rohanchkrabrty đã nhận 6 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của raystack/apsara
Issue tương tự
-
submodule-pointer-regression
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
smith-horn/skillsmith#3061 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: ops type: test
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 79/100
accensa/x402-facilitator-stellar#559 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Fix the no-pin ruling in line-drawings: pin a below-the-record stage at the record's chapterĐang mởdocumentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
cosimochellini/one-piece-zero-spoiler#551 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
getWatched() omits __proto__ directories when cwd is setCó thể đã có người làm @maxazure đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 79/100
-
area:web enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày