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
picodomでVDOMの理解を深める
Search
takanorip
January 25, 2018
Technology
430
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
picodomでVDOMの理解を深める
takanorip
January 25, 2018
More Decks by takanorip
See All by takanorip
「見せる」登壇資料デザインの極意
takanorip
4
1k
Design System Documentation Tooling 2025
takanorip
3
2.7k
デザインエンジニアの延長にデザインマネージャーとしての可能性を探る
takanorip
1
1.1k
Tools for Design Engineers other than LLM in the LLM era
takanorip
1
770
Bulletproof Design System with TypeScript
takanorip
7
5.2k
Eleventy3.0 で始める爆速個人ブログ開発!
takanorip
0
290
Webフォント選定の極意!フォントの基本から最新トレンドまで徹底解説
takanorip
6
1.1k
効果的な管理画面を デザインをするために 避けるべき5つの罠
takanorip
15
7.9k
社内管理画面のデザインもプロダクトデザイン
takanorip
5
2.3k
Other Decks in Technology
See All in Technology
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
840
自律型AIエージェントは何を破壊するのか
kojira
0
150
攻撃者視点で考えるDetection Engineering
cryptopeg
2
1.4k
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
390
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
2
1.4k
タクシーアプリ『GO』の実践的データ活用
mot_techtalk
3
190
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
1.8k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
110
EventBridge Connection
_kensh
5
700
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
230
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
2
590
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
320
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Designing for humans not robots
tammielis
254
26k
Paper Plane
katiecoart
PRO
1
51k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Docker and Python
trallard
47
3.9k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
Everyday Curiosity
cassininazir
0
230
Transcript
picodomでVDOMの 理解を深める Takanori Oki @Megro.es
自己紹介 • 大木 尊紀(オオキ タカノリ) / @takanorip • 株式会社スマートドライブ •
フロントエンドエンジニア • React、Vue、Polymer、Web制作全般 • Polymer Japan 翻訳チーム • 「イヌでもわかる Web Components」 好評配信中 • 輝夜月かわいい
Polymer Japan Cafe (2月6日@Google Tokyo Office)
hyperapp コードリーディング会 (2月7日@チームスピリット)
picodom ?
picodom • VDOMでページを操作するJSライブラリ • 1kbしかない、軽い • hyperappのJorgeBucaranさんが書いてる • 提供するメソッドは2つだけ •
h():VDOMを生成する • patch():VDOMへ差分適用 • JSXが使える
なんでpicodom? • Fish shellのファンだから(JorgeBucaranさんはFish shellの開発者でもある) • hyperappよりも機能が絞られているから読みやすいか なと思った • VDOMの実装だけ読みたかった
• picodom使ってオレオレライブラリ作れたら面白そう
picodomを読む
構成とか • picodomの構成 • h.js:h()の定義 / 29行 • patch.js:patch()を定義 /
206行 • (index.jsは↑2つのファイルをimportしてるだけ)
picodomを読む: h() • VDOMを生成する • DOM構造をオブジェクトに変換する (VODMはオブジェクト) • めっちゃシンプルなので言うことない •
Reactとかとやってることはだいたい同じ
h("div", {id: 'app'}, [ h("h1", {class: 'title'}, 'Title'), h("button", {
onclick: () => {hoge: 'fuga'} }, "+"), 'some text' ]);
{ name: "div", props: { id: "app" }, children: [
{ name: "h1", props: { class : "title" }, children: ["Title"] }, { name: "button", props: { onclick: () => {hoge: 'fuga'} }, children: ["+"] }, "some text" ] }
picodomを読む: patch() patch patchElement setElementProp removeChildren createElement updateElement setElementProp oldNode
== null patchElement true false
picodomを読む: patch() patch patchElementの結果を返す patchElement 差分更新の処理を司る setElementProp elementにpropsを挿入する createElement document.createElementを使って
elementを作成する updateElement elementのvalueやpropsを更新する removeChildren elementを削除する
picodomを使う
import { h, patch } from picodom /** @jsx h
*/ let node function render(view, withState) { patch(node, (node = view(withState))) } function view(state) { return ( <div> <h1>{state}</h1> <input autofocus type="text" value={state} oninput={e => render(view, e.target.value)} /> </div> ) } render(view, "Hello!")
まとめ • 軽量なVDOMフレームワーク • 仮想DOMの仕組みがなんとなくわかった • コア機能のみの実装で、実装はとてもシンプル • picodomベースでオレオレフレームワークをつくる本 を書いてみたい
おわり (Rounded-L Mgen+ 2p)