新聞中心
React Spectrum是一個(gè)由Adobe開發(fā)的組件庫(kù)和工具,可幫助你構(gòu)建自適應(yīng),可訪問且健壯的用戶體驗(yàn)。幫助開發(fā)者使用React構(gòu)建功能豐富的應(yīng)用程序。

https://react-spectrum.adobe.com/index.html
它具有三個(gè)主要庫(kù),你可以根據(jù)需要將它們一起使用或分別使用:
- React Spectrum是Adobe設(shè)計(jì)系統(tǒng)Spectrum的一個(gè)實(shí)現(xiàn)。
- React Aria是一個(gè)鉤子的集合,用于提供可訪問的UI基元,如國(guó)際化和在所有設(shè)備上的一致交互。
- React Stately是鉤子的另一個(gè)集合,但專注于啟用跨平臺(tái)狀態(tài)管理
結(jié)合在一起,React Spectrum讓你在開發(fā)Web應(yīng)用時(shí)有了一個(gè)良好的開端,超越了最低限度的要求,提供了卓越的用戶體驗(yàn)。
這篇文章將幫助你了解React Spectrum想要解決什么問題,以及如何開始使用它。
設(shè)計(jì)系統(tǒng)的問題
即使有React、Vue和Angular等現(xiàn)代前端庫(kù)的幫助,要?jiǎng)?chuàng)建一個(gè)符合UI一致性、可訪問性、國(guó)際化和可用性等高標(biāo)準(zhǔn)的Web應(yīng)用仍然相當(dāng)困難。這也是為什么如今設(shè)計(jì)系統(tǒng)如此流行的原因。
但是創(chuàng)建符合UI標(biāo)準(zhǔn)的設(shè)計(jì)系統(tǒng)既費(fèi)時(shí)又費(fèi)錢。從我的經(jīng)驗(yàn)來(lái)看,我總能看到開發(fā)人員和設(shè)計(jì)人員把過多的精力放在組件風(fēng)格上,而把可訪問性和國(guó)際化排除在基礎(chǔ)之外。當(dāng)公司剛起步時(shí),沒人會(huì)考慮這些!
考慮到本地化工作的難度,這一點(diǎn)是可以理解的。你需要考慮字符串翻譯,本地化日期和數(shù)字格式,啟用從右到左的交互等等。
這就是為什么React Spectrum如此有價(jià)值的原因。它利用Adobe在設(shè)計(jì)和開發(fā)功能豐富的用戶界面方面的經(jīng)驗(yàn),讓你在實(shí)現(xiàn)所有這些瑣碎的細(xì)節(jié)方面有一個(gè)好的開端,這些細(xì)節(jié)使得所有設(shè)備的用戶體驗(yàn)都很好。
React Spectrum如何幫助你
React Spectrum為你提供了適合交互和不同屏幕尺寸的組件。它包括全屏閱讀器和鍵盤導(dǎo)航支持,可訪問性。
該庫(kù)提供的組件應(yīng)遵循Spectrum的設(shè)計(jì)指南作為道具,因此你將不會(huì)使用常規(guī)的HTML屬性,例如“class”和“aria-label”。它還實(shí)現(xiàn)了主題設(shè)置,因此你可以輕松切換應(yīng)用程序的主題。
要使用React Spectrum,你需要安裝庫(kù)軟件包:
- npm install @adobe/react-spectrum
然后使用其提供程序容器定義其主題,區(qū)域設(shè)置和其他應(yīng)用程序設(shè)置:
- import {Provider, defaultTheme, Button} from '@adobe/react-spectrum';
- function App() {
- return (
- );
- }
React Spectrum還為你提供了Flex和Grid兩種布局系統(tǒng),所以你可以選擇你的團(tuán)隊(duì)要用哪種布局。
- import {Flex} from '@adobe/react-spectrum'
- // the component
將渲染為:
而Grid組件:
- import {Grid} from '@adobe/react-spectrum'
- // the component
- areas={['header header', 'sidebar content', 'footer footer']}
- columns={['1fr', '3fr']}
- rows={['size-1000', 'auto', 'size-1000']}
- height="size-6000"
- gap="size-100">
這將渲染為:
除了所有好的基于組件的UI之外,React Spectrum還包括如何測(cè)試你用它構(gòu)建的應(yīng)用程序的指南,所以如果你有興趣按照Adobe對(duì)其UI元素的設(shè)計(jì)來(lái)構(gòu)建你的React應(yīng)用程序,你不會(huì)后悔使用它。
React Aria如何工作
React Aria的主要目的是幫助你實(shí)現(xiàn)所有人在所有設(shè)備上的可訪問性。這包括各種類型的殘疾人:視覺,聽覺,運(yùn)動(dòng)和認(rèn)知障礙。
React Aria的偉大之處在于,每個(gè)鉤子都被歸納在一個(gè)特定的包下,你可以單獨(dú)安裝。這將使你可以將鉤子逐步地逐步引入到組件中。
React Aria有組件鉤子,允許你在不同的設(shè)備上構(gòu)建一致的非風(fēng)格化組件,當(dāng)然如果你想的話,你可以將其風(fēng)格化。
例如,有一個(gè)useButton鉤子,可以渲染一個(gè)具有以下功能的按鈕:
- 原生HTML
- 和通過ARIA支持的自定義元素類型
- 鼠標(biāo)和觸摸事件處理以及按狀態(tài)管理
- 鍵盤焦點(diǎn)管理和跨瀏覽器標(biāo)準(zhǔn)化
- 鍵盤事件支持空格鍵和Enter鍵
這是實(shí)現(xiàn)鉤子的方法:
- function Button(props) {
- let ref = useRef();
- let {buttonProps} = useButton(props, ref);
- let {children} = props;
- return (
- {children}
- );
- }
React Aria的另一個(gè)獨(dú)特功能是其焦點(diǎn)鉤子。FocusRing通過給元素賦予特定的樣式,通常是一個(gè)藍(lán)色的邊框,幫助鍵盤用戶確定頁(yè)面上哪個(gè)元素具有鍵盤焦點(diǎn)。
- // 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
當(dāng)你不使用CSS類(例如樣式組件)進(jìn)行樣式設(shè)置時(shí),可以使用useFocusRing鉤子:
- function Example() {
- let {isFocusVisible, focusProps} = useFocusRing();
- return (
- );
- }
最后,React Aria還提供了對(duì)國(guó)際化的支持,以幫助你的應(yīng)用程序適應(yīng)特定的語(yǔ)言或地區(qū)。i18nProvider組件允許你使用應(yīng)用程序定義的語(yǔ)言環(huán)境覆蓋瀏覽器中的默認(rèn)語(yǔ)言環(huán)境:
- import {I18nProvider} from '@react-aria/i18n';
React Stately如何工作
React Stately是一個(gè)鉤子庫(kù),可為你的設(shè)計(jì)系統(tǒng)提供跨平臺(tái)狀態(tài)管理。它可以在Web,react-native或任何其他平臺(tái)上運(yùn)行。
例如,你可以實(shí)現(xiàn)useRadioGroupState來(lái)幫助存儲(chǔ)一個(gè)Radio按鈕組的狀態(tài),而不需要定義自己的onChange函數(shù)。
- import {useRadioGroupState} from '@react-stately/radio';
- function RadioGroup(props) {
- let state = useRadioGroupState(props);
- return (
- <>
- type="radio"
- name={state.name}
- checked={state.selectedValue === 'dogs'}
- onChange={() => state.setSelectedValue('dogs')}
- />
- Dogs
- type="radio"
- name={state.name}
- checked={state.selectedValue === 'cats'}
- onChange={() => state.setSelectedValue('cats')}
- />
- Cats
- >
- );
- }
- defaultValue="dogs"
- onChange={(value) => alert(`Selected ${value}`)}
- />
React Stately的大多數(shù)鉤子就像帶有不可變性的常規(guī)useState鉤子一樣。將其用于Web時(shí),可以將其與React Aria配對(duì)以提供組件的可訪問性和用戶交互。就像React Aria一樣,React Stately可以逐步實(shí)現(xiàn)。
總結(jié)
許多公司和團(tuán)隊(duì)只是沒有資源來(lái)優(yōu)先考慮諸如可訪問性、國(guó)際化、全鍵盤導(dǎo)航和觸摸交互等功能。我們中的大多數(shù)人都在忙于發(fā)布核心應(yīng)用功能。
這就是為什么React Spectrum對(duì)許多團(tuán)隊(duì)如此有價(jià)值。這些庫(kù)的設(shè)計(jì)讓你可以在不同的設(shè)備上逐步將你的應(yīng)用邏輯分享給許多組件。有了React Spectrum,你不必再投入時(shí)間和金錢去創(chuàng)建一個(gè)支持無(wú)障礙和國(guó)際化的設(shè)計(jì)系統(tǒng)。
名稱欄目:ReactSpectrum,Adobe的組件庫(kù)和工具入門
標(biāo)題鏈接:http://www.dlmjj.cn/article/dhpgesd.html


咨詢
建站咨詢
