Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑なコンポーネントで 状態をもつのをやめた話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

複雑なコンポーネントで 状態をもつのをやめた話

Avatar for Daisuke Mino

Daisuke Mino

July 31, 2020

More Decks by Daisuke Mino

Other Decks in Programming

Transcript

  1. やばいポイント1 例えば `isDragging` , `isHover` , `isScrolling` のような、ユーザー入力 によって状態が目まぐるしく変わるような状態を、複雑なコンポーネントを操作 する場合においては、状態を操作した場所が追いづらくなる。

    コンポーネントに閉じる状態ならばコンポーネント内のstateに閉じておけばよ いが、渡されたデータの状態フィールドに変更を加えつつ他のコンポーネント に伝達する場合を想定する。
  2. 状態 • selectedGroupIds: Set<string> • selectedUserIds: Set<string> • focusedIds: Set<string>

    • invalidIds: Set<string> • disabledIds: Set<string> • intersectingIds: Set<string>
  3. 構造 • idNode: Map<string, NodeFragment> • parentChildren: Map<string, Array<string>> •

    childParent: Map<string, string> • parentDescendants: Map<string, Array<string>> • childAncestors: Map<string, Array<string>> • rects: Map<string, Rect>