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
Mithrilの紹介/Introduce of Mithril
Search
MURAKAMI Masahiko
March 02, 2017
Programming
0
320
Mithrilの紹介/Introduce of Mithril
MURAKAMI Masahiko
March 02, 2017
Tweet
Share
More Decks by MURAKAMI Masahiko
See All by MURAKAMI Masahiko
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
110
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
280
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
800
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
30
CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -
fossamagna
3
3.5k
Amplify Gen2の 新機能と実践的な使用例 AWS Amplify Gen 2 Festival in Japan/New features and practical use cases in Amplify Gen2
fossamagna
0
800
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
980
みんな本当に AWS Amplify を知っている?/do-you-really-know-aws-amplify
fossamagna
0
180
Amplify OSSにコントリビュートしてAmplify Badgeを手に入れよう!/contribute-to-amplify-oss-and-get-an-amplify-badge
fossamagna
0
600
Other Decks in Programming
See All in Programming
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
380
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
540
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
260
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.3k
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
960
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
390
モダンOBSプラグイン開発
umireon
0
140
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
120
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.6k
How to stabilize UI tests using XCTest
akkeylab
0
130
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
410
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Rails Girls Zürich Keynote
gr2m
96
14k
We Are The Robots
honzajavorek
0
200
Bash Introduction
62gerente
615
210k
Practical Orchestrator
shlominoach
191
11k
Designing for humans not robots
tammielis
254
26k
Fireside Chat
paigeccino
42
3.8k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Transcript
Mithril の紹介 A Javascript Framework for Building Brilliant Applications esm_LT
2017-03-03 村上 雅彦 @fossamagna
村上 雅彦 a.k.a @fossamagna 株式会社 永和システムマネジメント IT サー ビス事業部所属 2
Mithril を知ってますか? 3
Mithril SPA 向けのクライアントサイドのJavaScript フレー ムワー ク 4
Mithril の特徴 シンプルなAPI サイズが小さい(gzip で < 8kb) パフォー マンス高い VirtualDOM
ラウター もある 依存ライブラリがない IE9 までサポー ト(poly ll は必要なし) 5
Mithril のバー ジョン 最新は1.0.1 (2017-02-09) 0.2.5 (2016-05-27) 以前とは互換性がない部分があ るので、 そのままではまず動かない。
0.2.x からはマイグレー ションガイドを見て1.0.x に移行しましょう。 6
Mithril のバー ジョン 最新は1.0.1 (2017-02-09) 今日はここ。 0.2.5 (2016-05-27) 以前とは互換性がない部分があ るので、
そのままではまず動かない。 0.2.x からはマイグレー ションガイドを見て1.0.x に移行しましょう。 7
Hello World <body> <script src="//unpkg.com/mithril/mithril.js"></script> <script> var root = document.body;
// これでbody のテキストとして Hello world が描画される。 m.render(root, "Hello world"); </script> </body> m.render() で描画処理が実行されて画面に Hello world が表示される。 render() の第2 引数にはVDOM オブジェクトを指定 する。 8
View の定義 m.render() に渡すVDOM(Mithril ではvnode) はm() 関数(Hyperscript) で定義する。 シグネチャは m('
タグ名', ' 属性オブジェクト', '[ 子要素]') 。 以下のような感じで書いていく。 m.render(root, m("main", [ m("h1", {class: "title"}, "My first app"), m("button", "A button"), ])); 9
JXS でも書ける JXS を利用してHTML のシンタックスでも書ける。 m.render(root, <main> <h1 class="title">My first
app</h1> <button>A button</button> </main>); 10
JXS の使い方 Babel のtransform-react-jsx のpragma オプションで m() 関数を利用するように指定。 .babelrc の例
{ "presets": ["es2015"], "plugins": [ ["transform-react-jsx", { "pragma": "m" // これ大事! }] ] } 11
コンポー ネントも作れる var count = 0; var Hello = {
view: function() { return m("main", [ m("h1", {class: "title"}, "esm_LT"), // changed the next line m("button", {onclick: function() {count++}}, count + " clicks"), ]); } }; // mount 関数を呼び出して自動描画システムを有効にする m.mount(root, Hello); 12
自動描画システム 自動描画システムを有効にすると以下の条件の時に Mithril が描画処理を実行する。 UI イベント処理後(DOM イベントハンドラの呼び出 し後) HTTP リクエストの完了後
ラウティングの後 次のようにして自動描画システムを有効にできる m.mount(root, Hello); // or m.route(root, '/', {'/': Hello}); 13
HTTP リクエスト m.request({ method: "PUT", url: "/api/v1/users/:id", data: {id: fossamagna,
name: "MURAKAMI Masahiko"} }) .then(function(result) { console.log(result); }); Promise を返す。 Promise の処理が全て終わったら自動で描画が実行 される( 自動描画システムが有効なら)。 14
ラウター の定義 var Hello = { view: function() { return
'Hello'; } }; var UserPage = { view: function(vnode) { // ラウティングパラメー タが // vnode.attrs のプロパティにマッピングされる return 'Hi ' + vnode.attrs.id + '!'; } }; m.route(root, "/hello", { "/users/:id": UserPage, // :id の部分がパラメー タ "/hello": Hello }); 15
ラウター の利用 遷移 // fossamagna のペー ジに遷移 m.route.set('/users/fossamagna'); // または
m.route.set('/users/:id', {id: 'fossamagna'}) 画面の描画 Hi fossamagna! 16
ラウター の利用 現在のパスを取得 var path = m.route.get(); console.log(path); > /users/fossamagna
17
まとめ 依存ライブラリなしで入れやすい シンプルなAPI で学習しやすい 問題が起きても対処しやすいと思う( いざとなっ たらコー ドも読める分量) でも、 必要な物は揃っている
18
ぜひ、 Mithril をお試しあれ! 19