React Spectrum,Adobe的組件庫和工具入門
React Spectrum是一個由Adobe開發的組件庫和工具,可幫助你構建自適應,可訪問且健壯的用戶體驗。幫助開發者使用React構建功能豐富的應用程序。
https://react-spectrum.adobe.com/index.html
它具有三個主要庫,你可以根據需要將它們一起使用或分別使用:
- React Spectrum是Adobe設計系統Spectrum的一個實現。
- React Aria是一個鉤子的集合,用于提供可訪問的UI基元,如國際化和在所有設備上的一致交互。
- React Stately是鉤子的另一個集合,但專注于啟用跨平臺狀態管理
結合在一起,React Spectrum讓你在開發Web應用時有了一個良好的開端,超越了最低限度的要求,提供了卓越的用戶體驗。
這篇文章將幫助你了解React Spectrum想要解決什么問題,以及如何開始使用它。
設計系統的問題
即使有React、Vue和Angular等現代前端庫的幫助,要創建一個符合UI一致性、可訪問性、國際化和可用性等高標準的Web應用仍然相當困難。這也是為什么如今設計系統如此流行的原因。
但是創建符合UI標準的設計系統既費時又費錢。從我的經驗來看,我總能看到開發人員和設計人員把過多的精力放在組件風格上,而把可訪問性和國際化排除在基礎之外。當公司剛起步時,沒人會考慮這些!
考慮到本地化工作的難度,這一點是可以理解的。你需要考慮字符串翻譯,本地化日期和數字格式,啟用從右到左的交互等等。
這就是為什么React Spectrum如此有價值的原因。它利用Adobe在設計和開發功能豐富的用戶界面方面的經驗,讓你在實現所有這些瑣碎的細節方面有一個好的開端,這些細節使得所有設備的用戶體驗都很好。
React Spectrum如何幫助你
React Spectrum為你提供了適合交互和不同屏幕尺寸的組件。它包括全屏閱讀器和鍵盤導航支持,可訪問性。
該庫提供的組件應遵循Spectrum的設計指南作為道具,因此你將不會使用常規的HTML屬性,例如“class”和“aria-label”。它還實現了主題設置,因此你可以輕松切換應用程序的主題。
要使用React Spectrum,你需要安裝庫軟件包:
- npm install @adobe/react-spectrum
然后使用其提供程序容器定義其主題,區域設置和其他應用程序設置:
- import {Provider, defaultTheme, Button} from '@adobe/react-spectrum';
- function App() {
- return (
- <Provider theme={defaultTheme}>
- <Button variant="cta">Hello React Spectrum!</Button>
- </Provider>
- );
- }
React Spectrum還為你提供了Flex和Grid兩種布局系統,所以你可以選擇你的團隊要用哪種布局。
- import {Flex} from '@adobe/react-spectrum'
- // the component
- <Flex direction="column" width="size-2000" gap="size-100">
- <View backgroundColor="celery-600" height="size-800" />
- <View backgroundColor="blue-600" height="size-800" />
- <View backgroundColor="magenta-600" height="size-800" />
- </Flex>
將渲染為:

而Grid組件:
- import {Grid} from '@adobe/react-spectrum'
- // the component
- <Grid
- areas={['header header', 'sidebar content', 'footer footer']}
- columns={['1fr', '3fr']}
- rows={['size-1000', 'auto', 'size-1000']}
- height="size-6000"
- gap="size-100">
- <View backgroundColor="celery-600" gridArea="header" />
- <View backgroundColor="blue-600" gridArea="sidebar" />
- <View backgroundColor="purple-600" gridArea="content" />
- <View backgroundColor="magenta-600" gridArea="footer" />
- </Grid>
這將渲染為:
除了所有好的基于組件的UI之外,React Spectrum還包括如何測試你用它構建的應用程序的指南,所以如果你有興趣按照Adobe對其UI元素的設計來構建你的React應用程序,你不會后悔使用它。
React Aria如何工作
React Aria的主要目的是幫助你實現所有人在所有設備上的可訪問性。這包括各種類型的殘疾人:視覺,聽覺,運動和認知障礙。
React Aria的偉大之處在于,每個鉤子都被歸納在一個特定的包下,你可以單獨安裝。這將使你可以將鉤子逐步地逐步引入到組件中。
React Aria有組件鉤子,允許你在不同的設備上構建一致的非風格化組件,當然如果你想的話,你可以將其風格化。
例如,有一個useButton鉤子,可以渲染一個具有以下功能的按鈕:
- 原生HTML<button>支持
- <a>和通過ARIA支持的自定義元素類型
- 鼠標和觸摸事件處理以及按狀態管理
- 鍵盤焦點管理和跨瀏覽器標準化
- 鍵盤事件支持空格鍵和Enter鍵
這是實現鉤子的方法:
- function Button(props) {
- let ref = useRef();
- let {buttonProps} = useButton(props, ref);
- let {children} = props;
- return (
- <button {...buttonProps} ref={ref}>
- {children}
- </button>
- );
- }
- <Button onPress={() => alert('Button pressed!')}>Test</Button>
React Aria的另一個獨特功能是其焦點鉤子。FocusRing通過給元素賦予特定的樣式,通常是一個藍色的邊框,幫助鍵盤用戶確定頁面上哪個元素具有鍵盤焦點。
- // style
- .button {
- -webkit-appearance: none;
- appearance: none;
- background: green;
- border: none;
- color: white;
- font-size: 14px;
- padding: 4px 8px;
- }
- .button.focus-ring {
- outline: 2px solid dodgerblue;
- outline-offset: 2px;
- }
- // component
- <FocusRing focusRingClass="focus-ring">
- <button className="button">Test</button>
- </FocusRing>
當你不使用CSS類(例如樣式組件)進行樣式設置時,可以使用useFocusRing鉤子:
- function Example() {
- let {isFocusVisible, focusProps} = useFocusRing();
- return (
- <button
- {...focusProps}
- style={{
- WebkitAppearance: 'none',
- appearance: 'none',
- background: 'green',
- border: 'none',
- color: 'white',
- fontSize: 14,
- padding: '4px 8px',
- outline: isFocusVisible ? '2px solid dodgerblue' : 'none',
- outlineOffset: 2
- }}>
- Test
- </button>
- );
- }