Open7

NextUIを眺める

thasmtthasmt


パッと見た感じChakraUIに似ているけど、ChakraUIよりも少ないコードでUIを構築できそう。
一つのUIに対して複数のコンポーネントを組み合わせるのではなくて、ある程度のニーズがある拡張されたUIをあらかじめ、<Input.Password />のように用意している。

ラベルやアイコンもChildrenではなく、Propsで渡すことができる。
Inputコンポーネントの場合は下記のようになる。

// NextUIのInputコンポーネント
<Input
    labelLeft="https://"
    labelRight=".com"
    placeholder="mysite"
/>

ChakraUIの場合は複数のコンポーネントを組み合わせる必要がある。

// ChakraUIのInputコンポーネント
<InputGroup size='sm'>
    <InputLeftAddon children='https://' />
    <Input placeholder='mysite' />
    <InputRightAddon children='.com' />
</InputGroup>
thasmtthasmt

Propsで渡せる真偽値の属性は borderedzoomed のように形容詞ひとつに統一されていて、
requireddisabled のようなHTMLの標準的な命名ルールに準拠しているよう。

自分でコンポーネントを作る場合、ここらへんの命名は結構迷うので参考にしていきたい。

逆にChakraUIは is + 単語 に統一されていて、真偽値であることが一目でわかるようになっている。
モーダルのopenとかは英語に馴染みがないとメソッドか真偽値か分かりづらいので、ChakraUIのほうが日本人に優しいように感じる。
ただ、HTMLの属性の命名規則と統一できないのでここは迷うところだなと思う。

thasmtthasmt

ファイルの命名はケバブケース。
一つのUIに対してディレクトリを作り、その中でindex、分割したコンポーネント、スタイル、カスタムフック、テスト、Storybookのstoriesファイルを格納している。

thasmtthasmt

場合によってはpropsも別ファイルに分けている。

thasmtthasmt

ボタンやインプットコンポーネントには React Aria が使われているのでアクセシビリティも考慮されている。
React Aria を使ったことがないのでどこまでありがたみがあるかわからないけど、今後アクセシビリティに関する技術選定が必要になった際にはにReact Ariaを使っている実装の部分を参考にしたい。