Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UI Component 作ってますか?
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nobuki Inoue
August 29, 2018
Programming
560
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UI Component 作ってますか?
Nobuki Inoue
August 29, 2018
More Decks by Nobuki Inoue
See All by Nobuki Inoue
Webサービスを作ってみて気づいたこと
black_trooper
0
490
10年使ったDBFluteに思う事
black_trooper
0
530
Riot.jsでSemanticUIを使ってみる
black_trooper
2
600
Other Decks in Programming
See All in Programming
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
460
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
380
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
The NotImplementedError Problem in Ruby
koic
1
660
AIとRubyの静的型付け
ukin0k0
0
550
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.8k
JavaDoc 再入門
nagise
0
310
Swiftのレキシカルスコープ管理
kntkymt
0
220
net-httpのHTTP/2対応について
naruse
0
460
Vite+ Unified Toolchain for the Web
naokihaba
0
150
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
WENDY [Excerpt]
tessaabrams
11
38k
A designer walks into a library…
pauljervisheath
211
24k
Building AI with AI
inesmontani
PRO
1
1.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
AI: The stuff that nobody shows you
jnunemaker
PRO
8
700
Music & Morning Musume
bryan
47
7.2k
Un-Boring Meetings
codingconduct
0
310
Transcript
UI Component 作ってますか? 2018/08/29 Riot.js LT大会@Tokyo #1
HELLO! 井上 暢己(いのうえ のぶき) @black_trooper フリーのWebエンジニア フロントエンドとサーバサイドどっちもやって ます。 2
Component 分割してますか? Riot.js はコンポーネント志向のUIフレームワークです 3
1 Page 1 Component 4 <sample> <div class="menu"> <a class="header
item" href="home"> <img src="images/logo.png" alt="" />Sampleサービス </a> <a class="item" href="contact">お問い合わせ</a> </div> <div class="tweet" each="{ tweet in tweets }"> <div class="item-header">{ tweet.full_name }</div> <div class="item"> { tweet.text } </div> <div class="item-footer"> <span class="reply">{ tweet.reply }件の返信</span> <span class="retweet">{ tweet.retweet }件のリツイート</span> <span class="favorite">{ tweet.favorite } いいね</span> </div> </div> </sample>
分割された Component 5 <common-header class="menu"> <a class="header item" href="home"> <img
src="images/logo.png" alt="" />Sampleサービス </a> <a class="item" href="contact">お問い合わせ</a> </common-header> <item-footer class="item-footer"> <span class="reply">{ opts.tweet.reply }件の返信</span> <span class="retweet">{ opts.tweet.retweet }件のリツイート</span> <span class="favorite">{ opts.tweet.favorite } いいね</span> </item-footer> <sample> <common-header></common-header> <div class="tweet" each="{ tweet in tweets }"> <div class="item-header">{ tweet.full_name }</div> <div class="item"> { tweet.text } </div> <item-footer tweet="{ tweet }"></item-footer> </div> </sample>
Component 公開してますか? 「自サイトに特化してるから他では使い道ないよ」 6 「たいしたもの作ってないし・・・」
他で使い道ないよ の例 Checkbox Component 初期値に戻す reset メ ソッド 初期値から変更された かを確認する
changed メソッド 7 <xx-checkbox> <label> <input type="checkbox" checked="{ checked }" onclick="{ click }" /> <yield /> </label> <script> this.checked = false this.defaultChecked = this.checked this.click = () => { this.checked = !this.checked } this.reset = () => { this.checked = this.defaultChecked } this.changed = () => { return this.checked !== this.defaultChecked } </script> </xx-checkbox> <xx-checkbox>利用規約に同意します </xx-checkbox> CSSの都合でこんな要望があることも - <yield /> は <span> で囲みたい - <input> に xxx というクラスを追加したい
CSSとセットじゃないと使いにくい 8
CSS Framework 使ってますか? 9 CSS Framework に特化した Component でいいじゃん!
CSS Framework の特徴 10 ▸ カンタンにカッコイイWebサイト が作成できる ▸ レスポンシブデザインに対応し ている
▸ JavaScript(主にJQuery)で DOMを直接いじる ▸ 仮装DOMでページを構成する UI Framework とは相性が悪い ▸ 対策として Component set が 作られた
Component set の一例 11 Angular React Vue Riot Bootstrap ngbootstrap
reactstrap Bootstrap + Vue Riot-bootstrap (v3) Semantic UI Semantic UI Angular (1.x) Semantic UI React Semantic UI Vue Semantic UI Riot Material Angular Material MATERIAL-UI Vue Material Riot MaterialUI Other RiotGear (for Braze CSS) (Riot 2.x)
Semantic UI Riot https://github.com/black-tr ooper/semantic-ui-riot Place your screenshot here 12
<su-radio-group ref="radio"> <su-radio value="1">Radio choice1</su-radio> <su-radio value="2">Radio choice2</su-radio> </su-radio-group> <script>
const getRadioValue = () => { return this.refs.radio.value } </script> Radio 13 <div class="ui radio checkbox"> <input type="radio" name="radio" ref="radio1" value="1"> <label>Radio choice1</label> </div> <div class="ui radio checkbox"> <input type="radio" name="radio" ref="radio2" value="2"> <label>Radio choice</label> </div> <script> const getRadioValuebyJQuery = () => { return $("[name=radio]:checked").val() } const getRadioValueByRiotRefs = () => { return this.refs.radio1.checked ? this.refs.radio1.value : (this.refs.radio2.checked ? this.refs.radio2.value : null) } </script> Before After 値の取得も簡単に! refsだけで頑張るとツラい TagとCSSの記述が簡潔
npm trends から見る UI Componentの 需要 どの UI Component も需要があるっぽい
14
まとめ ▸ Riot.js の Component を積極的に公開し よう❗ ▸ CSS Framework
に特化した Component も結構需要あるよ! ▸ 既存 Component set にない機能を作るも よし、推しCSS Framework向けの Component setを作るもよし ▸ Semantic UI Riot も使ってみてね 15 https://github.com/black-trooper/semantic-ui-riot
16 THANKS! ご清聴ありがとうございました。