emacs vue-mode で構文チェックする領域がおかしくなったの対処方
vue-mode で書いていると構文チェックする領域がおかしくなるときがある。vue-mode の、というより mmm-mode で発生する現象なのかもしれない。
具体的には
vue で jointjs を動かす
昨日の react で jointjs を動かすのを vue でもやってみた。
初期化は次のようにすすめる
vue init webpack vue-jointjs
cd vue-jointjs
npm install --save jointjs
変更箇所は次の通り
App.vue
<template> <div id="app"> <img src="./assets/logo.png"> <JointJs/> <router-view/> </div> </template> <script> import JointJs from '@/components/JointJs' export default { name: 'App', components: { JointJs } } </script> ...
components/JointJs.vue
<template> <div> <div ref="myholder"></div> </div> </template> <script> import joint from 'jointjs' export default { name: 'JointDiagram', mounted(){ let graph = new joint.dia.Graph let paper = new joint.dia.Paper({ el: this.$refs.myholder, model: graph, width: 600, height: 100, gridSize: 1 }) let rect = new joint.shapes.standard.Rectangle(); rect.position(100, 30); rect.resize(100, 40); rect.attr({ body: { fill: 'blue' }, label: { text: 'Hello', fill: 'white' } }); rect.addTo(graph); let rect2 = rect.clone(); rect2.translate(300, 0); rect2.attr('label/text', 'World!'); rect2.addTo(graph); let link = new joint.shapes.standard.Link(); link.source(rect); link.target(rect2); link.addTo(graph); } } </script>
react とそんなに変わらない。domへの参照方法が違う。すべてのコードはここ
GitHub - ororog/vue-jointjs
react も vue も、外部ライブラリを使う場合は dom への参照を教えてあげれば動かせるっぽいことは理解できた。
ただ、データ Redux (Vuex) の流れに乗せるのは難しそう。
React で JointJs を動かす
React で JointJs (https://www.jointjs.com/) を使う方法がわからなかったので調べた。
https://resources.jointjs.com/tutorial/hello-world のコードが動くようにしたい。
コマンドラインで create-react-app を実行して、雛形からはじめる
> npx create-react-app react-jointjs > cd react-jointjs
jointjs をインストール
> npm install jointjs --save
アプリケーションを実行する。以後、App.js を編集してセーブすれば自動的にページが更新される
> npm start
App.js を次のように編集する。
追加部分は jointjs の helloworld のコードの var を let にして、ノード(#myholder)への参照を書き換えた。
import React, { Component } from 'react'; import logo from './logo.svg'; import './App.css'; //// ここから追加部分 import joint from 'jointjs'; class JointJs extends Component { constructor() { super(); this.jointHolder = React.createRef(); } componentDidMount() { let graph = new joint.dia.Graph; let paper = new joint.dia.Paper({ el: this.jointHolder.current, model: graph, width: 600, height: 100, gridSize: 1 }); let rect = new joint.shapes.standard.Rectangle(); rect.position(100, 30); rect.resize(100, 40); rect.attr({ body: { fill: 'blue' }, label: { text: 'Hello', fill: 'white' } }); rect.addTo(graph); let rect2 = rect.clone(); rect2.translate(300, 0); rect2.attr('label/text', 'World!'); rect2.addTo(graph); let link = new joint.shapes.standard.Link(); link.source(rect); link.target(rect2); link.addTo(graph); } render() { return ( <div ref={this.jointHolder}></div> ); } } //// ここまで追加部分 class App extends Component { render() { return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <h1 className="App-title">Welcome to React</h1> </header> <p className="App-intro"> To get started, edit <code>src/App.js</code> and save to reload. </p> <JointJs/> // この一行のみ追加 </div> ); } } export default App;
これでとりあえず動く。
vuejs コンポーネントライブラリの github star などを調べた
vuejs のコンポーネントライブラリを調べていて、このサイトにだいたいまとめられていることはわかった。
github.com
でもこんどは情報がライブラリが多すぎて調べるのが大変だとわかったので、指標として github star などの情報をまとめた。
docs.google.com
script も書いているので、いつか定期的に更新してあげたい。